Урок 2. Рефлексивная ассоциация (Самоассоциация). Работа инкапсуляции при самоассоциации


#1

Отдельным видом ассоциации является рефлексивная ассоциация или же её ещё называют самоассоциацией. Это случаи, когда класс может сказать, что «я знаю о себе». Например:

Также в таком случае нужно помнить, что при самоацссоциации недопустимо создавать экземпляр себя же в конструкторе, поскольку пройдёт зацикленный вызов конструкторв (будут бесконечно создаваться экземпляры данного класса) до тех пор пока стек неперполниться не будет выдана ошибка StackOverflowException:

class MyClass
{
     MyClass instance;

     public MyClass()  // StackOverflowException
     {
          Console.WriteLine("Constructor MyClass");

          // Самоассоциация, после первой попытки инстанцирования приводит к 
          // цикличному инстанцированию.

          instance = new MyClass();
     }
}

Также нужно подчеркнуть, что в случаи создания экземпляра своего же класса внутри себя, на данном экземпляре (внутри класса) модификаторы доступа работать не будут, и экземпляр будет иметь возможность обращения ко всем членам класса (закрытым и открытым) – инкапсуляция в таком случае не работает!:


Содержание справочника С# Essential