如何在其他类中使用此方法?

时间:2013-04-21 19:19:08

标签: c#

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

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;
                }
            }
        }


    }
}

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

    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;
        }

    }

我该怎么办?

1 个答案:

答案 0 :(得分:1)

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

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

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

  

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

     

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

     

internal - 只能在同一个项目中访问成员。

     

protected internal - 与internal相同,但从该类继承的类也可以到达其成员,甚至来自另一个项目。

     

私人 - 只能由同一班级的成员联系。这是最严格的可见性。默认情况下,类和结构设置为私有可见性。