我有这个类,它包含一个查看对象的方法:
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;
}
}
我该怎么办?
答案 0 :(得分:1)
方法PositionsInReach
和AdjacentPositions
是私有的......
如果您必须在Game
之外使用它们,则需要公开......
此外,如果您想在另一个程序集中使用Game
而不是内部程序,那么您的类应该是公开的。
查看C#可见性的一些定义:http://csharp.net-tutorials.com/classes/visibility/
公开 - 可以从任何地方联系到会员。这是限制性最小的可见性。默认情况下,枚举和接口是公开可见的。
protected - 只能从同一个类中或从继承自此类的类中访问成员。
internal - 只能在同一个项目中访问成员。
protected internal - 与internal相同,但从该类继承的类也可以到达其成员,甚至来自另一个项目。
私人 - 只能由同一班级的成员联系。这是最严格的可见性。默认情况下,类和结构设置为私有可见性。