-9

我有这个类,它包含一个查看对象的方法:

internal class Game
{
    private IEnumerable<Tuple<int, int>> PositionsInReach(int row, int column, int distance)
    {
        var visited = new bool[park.GetLength(0),park.GetLength(1)];
        visited[row, column] = true;

        var queue = new Queue<Tuple<int, int>>();
        queue.Enqueue(new Tuple<int, int>(row,column));

        while (queue.Count!=0)
        {
            var aux = queue.Dequeue();
            yield return aux;
            foreach (var adjacentPosition in AdjacentPositions(aux.Item1,aux.Item2))
            {
                if (!visited[adjacentPosition.Item1, adjacentPosition.Item2]
                    && Distance(row,column,aux.Item1,aux.Item2) <= distance)
                {
                    queue.Enqueue(adjacentPosition);
                    visited[adjacentPosition.Item1, adjacentPosition.Item2] = true;
                }
            }
        }


    }

    private IEnumerable<Tuple<int, int>> AdjacentPositions(int row, int col)
    {
        if(row+1 < park.GetLength(0)) yield return new Tuple<int,int>(row + 1, col); 
        if(row-1 >=0 ) yield return new Tuple<int,int>(row - 1, col); 
        if(col+1 < park.GetLength(1)) yield return new Tuple<int,int>(row , col + 1);
        if(col - 1 >= 0) yield return new Tuple<int, int>(row , col - 1);
    }

    private static int Distance(int x1, int y1, int x2, int y2) 
    {
        return Math.Abs(x2 - x1) + Math.Abs(y2 - y1);
    }

    private IEnumerable<Tuple<int, int>> PositionsInReach2(int row, int column, int distance) //actionrange
    {
        var visited = new bool[park.GetLength(0), park.GetLength(1)];
        visited[row, column] = true;

        var queue = new Queue<Tuple<int, int>>();
        queue.Enqueue(new Tuple<int, int>(row, column));

        while (queue.Count != 0)
        {
            var aux = queue.Dequeue();
            yield return aux;
            foreach (var adjacentPosition in AdjacentPositions(aux.Item1, aux.Item2))
            {
                if (!visited[adjacentPosition.Item1, adjacentPosition.Item2]
                    && Distance(row, column, aux.Item1, aux.Item2) <= distance && park[adjacentPosition.Item1,adjacentPosition.Item2]==null)
                {
                    queue.Enqueue(adjacentPosition);
                    visited[adjacentPosition.Item1, adjacentPosition.Item2] = true;
                }
            }
        }


    }
}

所以我需要在其他名为 Behaviour 的类中使用这些方法:

    public class EatingBehaviour
    {
        public static bool ToEat1(Dinosaur dino, int x, int y, LivingThing[,] park)
        {
            if (dino.Weight < dino.MiddleWeight  /*&& Dinosaur in action range, I need use the methods of the class Game here*/)
            {
                return true;
            }

            return false;
        }

    }

我怎样才能做到这一点???

4

1 回答 1

1

方法PositionsInReachAdjacentPositions是私有的...如果您必须在 之外使用它们Game,它们需要是公共的...

此外,如果你想Game在另一个程序集中使用,而不是在内部,你的类应该是公共的。

看看 C# 可见性的一些定义:http: //csharp.net-tutorials.com/classes/visibility/

public - 可以从任何地方联系到该成员。这是限制最少的可见性。默认情况下,枚举和接口是公开可见的。

protected - 只能从同一个类中访问成员,或者从继承自该类的类中访问成员。

内部 - 只能从同一项目内联系成员。

protected internal - 与 internal 相同,除了从此类继承的类也可以访问它的成员,甚至来自另一个项目。

private - 只能由同一类的成员访问。这是最严格的可见性。类和结构默认设置为私有可见性。

于 2013-04-21T19:25:25.960 回答