В какой-то момент я пытаюсь обернуть голову вокруг причины, по которой некоторым классам cannibal разрешено компилировать.
Прежде чем продолжить, возможно, мне следует объяснить, что я называю "каннибалом". Не уверен, что я только что придумал этот термин или если он был вокруг какое-то время или даже если я правильно его использую, но это не важно сейчас.
Я в основном называю класс каннибала классом, который потребляет себя. Другими словами, класс, интерфейс которого объявляет члены своего типа. Например:
class Foo
{
public Foo SomeFoo;
}
Как вы можете видеть выше, класс Foo имеет член типа Foo (сам).
Теперь, когда я впервые увидел это (время назад), я не собирался компилироваться, но, к моему удивлению, он компилируется. Причина, по которой я не делал этого, собирался, потому что для меня это кричит какой-то рекурсивный кошмар.
Чтобы усложнить ситуацию немного, я решил попробовать одно и то же, но создав класс struct, например:
struct Foo
{
public Foo SomeFoo;
}
К сожалению, это не компилируется, вместо этого вы получаете ошибку: Элемент Struct 'Foo.SomeFoo' типа 'Foo' вызывает цикл в структуре структуры
Для меня ошибка компиляции имеет больше смысла, чем ошибка, но я уверен, что большинство из них являются логическим объяснением этого поведения, поэтому мне было интересно, может ли кто-нибудь из вас объяснить это поведение.
Спасибо.