C#的新功能...试图找出下面new GameObject[20, 20]
如何实际引用私有属性值而不是硬编码值。
private int xRadius = 20;
private int yRadius = 20;
private GameObject [,] grid = new GameObject[20, 20];
我尝试了this.xRadius
和self.xRadius
的变体而没有运气。我怎么能这样做?
答案 0 :(得分:5)
您不能在类的变量声明范围中使用this
,因为在那个时刻没有理由在xRadius
之前定义grid
。
你可以通过将xRadius
和yRadius
声明为常量来实现你想要的(常量是在运行时不会改变的不可变变量);
private const xRadius = 20;
private const yRadius = 20;
private GameObject[,] grid = new GameObject[xRadius, yRadius];
或者将它们标记为静态变量(静态变量存在于任何类实例之外,并且在任何类实例消失后都可用);
class Example {
private static xRadius = 20;
private static yRadius = 20;
private GameObject[,] grid = new GameObject[Example.xRadius, Example.yRadius];
或者您可以在类构造函数中定义网格并使用普通的类变量引用;
class Example {
public Example() {
this.grid = new GameObject[this.xRadius, this.yRadius];
}
}
最快的解决方案(在运行时资源使用量较少)使用constants
,因为值将在编译时复制,并且它们不会占用任何额外资源,最动态的解决方案是在构造函数或在访问网格对象之前,这将允许您在运行时更改xRadius
和yRadius
,并使用相同的半径变量重新初始化grid
变量。
答案 1 :(得分:3)
字段初始值设定项无法访问实例成员,因为它们在静态上下文中运行。因此,它们(如静态方法)无法引用实例方法。
假设包含类为Foo
,您可以在构造函数中初始化grid
,
class Foo
{
private int xRadius = 20;
private int yRadius = 20;
private GameObject[,] grid;
public Foo()
{
grid = new GameObject[xRadius, yRadius];
}
}