2016-06-12 8 views
3

ここでは、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
あなたは xRadius理由はないので、時間内にその瞬間のクラスの変数宣言スコープに thisを使用することはできません

gridの前に定義する必要があります。

xRadiusyRadiusを定数として宣言することで、目的を達成できます(定数は実行時に変更されない可変ではありません)。

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を使用して、彼らは文句を言わない余分なリソースを占有され、最もダイナミックな解決策は、それらを設定していますグリッドオブジェクトにアクセスする前に、実行時にxRadiusyRadiusを変更し、同じ半径変数を使用してgrid変数を再初期化することができます。

3

フィールド初期化子は静的コンテキストで実行されるため、インスタンスメンバーにアクセスできません。したがって、静的メソッドのように、インスタンスメソッドを参照することができません。

と仮定すると、含まれているクラスは、あなたがコンストラクタでgridを初期化することができ、Fooある

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

    private GameObject[,] grid; 

    public Foo() 
    { 
     grid = new GameObject[xRadius, yRadius]; 
    } 
} 
関連する問題