2016-06-12 126 views
3

C#的新手這裏試圖弄清楚以下new GameObject[20, 20]實際上可以引用私有屬性值而不是硬編碼值。如何指定動態默認值

private int xRadius = 20; 
private int yRadius = 20; 

private GameObject [,] grid = new GameObject[20, 20]; 

我試過的this.xRadiusself.xRadius變化,沒有運氣。我怎樣才能做到這一點?

+1

@sixones回答涵蓋了一些其他可能的實現。值得回顧,在我看來 – jdphenix

回答

5

一類的變量聲明範圍,因爲在那個時刻,您不能使用this沒有理由xRadiusgrid之前定義。

您可以通過聲明xRadiusyRadius作爲常數來實現您想要的(常量是在運行時不會更改的不變變量);或者將它們標記爲靜態變量(靜態變量存在於任何類實例之外,並將在任何類實例消失後可用);

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的值將在編譯時被複制,它們不會佔用任何額外的資源,最有活力的解決方案是將它們設置在構造函數或訪問網格對象之前,這將允許您在運行時更改xRadiusyRadius,並使用相同的半徑變量重新初始化grid變量。

3

字段初始值設定程序無法訪問實例成員,因爲它們在靜態上下文中運行。因此,他們(如靜態方法)無法引用實例方法。

假設包含類是Foo,你可以在構造函數初始化grid

class Foo 
{ 
    private int xRadius = 20; 
    private int yRadius = 20; 

    private GameObject[,] grid; 

    public Foo() 
    { 
     grid = new GameObject[xRadius, yRadius]; 
    } 
}