2016-11-02 16 views
1

私は、これは奇妙なことの一種である知っている、と私はそれがとんでもないそうなので、このルートを行くつもりですとは思わないと私はクラスを自己参照することはできますか?

できるクラスをより良い代替手段を持っていますが、...ので、自己参照ですか?それ自身のインスタンスを含めることはできますか?それは(少なくともMonoDevelopで)コンパイルされますが、私は問題の可能性が高いと想像しなければなりません。

問題のコードは次のとおりです。

public class DamageVehicle 
{ 
    public int DVehicleID {get; set;} 
} 

public class DamageTypeArray 
{ 
    public int[] DTypeArray {get; set;} 
} 

public class DamagePackage 
{ 
    DamageVehicle dv; 
    DamageTypeArray dta; 
    DamagePackage dp; 
} 

は(非意見・ベース)、これはC#で動作しません理由の明確ありますか?あるレベルでは、dp = NULLと仮定すると、そうする可能性があるように見えますが、それは永遠に繰り返されません。この使用に起因する他の問題は何ですか?

+2

クラスは、それ自体が含まれてすることが可能です。それは許可され、完全に合法です。 –

答えて

2

自体は、そのものを含んでおらず、への参照を保持しています()。

はい、問題はありません。参照は基本的に単なるポインタであり、これはリンクされたリストがどのように実装されているかを正確に示しています。

+0

Oh duh - それは信じられないほど明白で、私は何とか完全にそれを逃した!良い悲しみ - ありがとう!笑 –

+1

私は、この質問の文脈では、それがそれ自体への言及であると述べるべきだと思います。 – Enigmativity

1

だけでなく、それは可能だが、それが実際に使用されることは稀ではありませんが、良い例がSingletonパターンです:

public sealed class Singleton 
{ 
    private static readonly Lazy<Singleton> lazy = 
     new Lazy<Singleton>(() => new Singleton()); 

    public static Singleton Instance { get { return lazy.Value; } } 

    private Singleton() 
    { 
    } 
}