Per un po 'di tempo, ho cercato di comprendere il motivo per cui alcune classi "cannibali" possono compilare.Classi di cannibali
Prima di continuare, forse dovrei spiegare quello che chiamo una classe "cannibale". Non sono sicuro se ho appena inventato quel termine o se è stato in giro per un po 'o anche se sto usando correttamente, ma che non è importante in questo momento.
Fondamentalmente io chiamo una classe di cannibali una classe che si consuma. In altre parole una classe la cui interfaccia dichiara membri del proprio tipo. Ad esempio:
class Foo
{
public Foo SomeFoo;
}
Come si può vedere sopra, la classe Foo ha un membro di tipo Foo (stesso).
Ora, la prima volta che ho visto questo (poco tempo fa) non avevo intenzione di compilare, ma con mia sorpresa lo compilava. Il motivo per cui non ho fatto questo sarebbe compilato perché a me questo urla qualche tipo di incubo ricorsivo.
A complicare le cose un po 'più, ho deciso di provare la stessa cosa ma facendo la classe una struttura come ad esempio:
struct Foo
{
public Foo SomeFoo;
}
Purtroppo, questo non viene compilato, invece si ottiene l'errore: membro Struct 'Foo.SomeFoo' di tipo 'Foo' provoca un ciclo nel layout struct
per me, un errore di compilazione ha più senso che nessun errore, ma sono sicuro che ci siano la maggior parte una spiegazione logica a questo comportamento così ho mi stavo chiedendo se qualcuno di voi ragazzi potesse e xplain questo comportamento.
Grazie.
LOL Classe cannibale. Questo mi ha fatto ridere :) –
Non ho mai sentito chiamare Cannibal di solito Self Referencing ma mi piace Cannibal molto meglio. – JoshBerke