Отдельным видом ассоциации является рефлексивная ассоциация или же её ещё называют самоассоциацией. Это случаи, когда класс может сказать, что «я знаю о себе». Например:
Также в таком случае нужно помнить, что при самоацссоциации недопустимо создавать экземпляр себя же в конструкторе, поскольку пройдёт зацикленный вызов конструкторв (будут бесконечно создаваться экземпляры данного класса) до тех пор пока стек неперполниться не будет выдана ошибка StackOverflowException
:
class MyClass
{
MyClass instance;
public MyClass() // StackOverflowException
{
Console.WriteLine("Constructor MyClass");
// Самоассоциация, после первой попытки инстанцирования приводит к
// цикличному инстанцированию.
instance = new MyClass();
}
}
Также нужно подчеркнуть, что в случаи создания экземпляра своего же класса внутри себя, на данном экземпляре (внутри класса) модификаторы доступа работать не будут, и экземпляр будет иметь возможность обращения ко всем членам класса (закрытым и открытым) – инкапсуляция в таком случае не работает!: