C # наследование и ключевое слово "это" - PullRequest
3 голосов
/ 18 ноября 2010

Я работаю над кодом, который был ранее написан другим разработчиком, и натолкнулся на блок кода ниже:

/// <summary>
/// Default Constructor.
/// </summary>
public Body(Revision parent)
{
  mContainer = parent;
  mSections = new ArrayList();
  mSummary = new ArrayList();
}

/// <summary>
/// Constructs a Body from specified ParseElement.
/// </summary>
/// <param name="parent">Revision container.</param>
/// <param name="elem">Source ParseElement.</param>
public Body(Revision parent, ParseElement elem) : this(parent)
{more constructing stuff}

Насколько я понимаю, перегруженный конструктор также вызывает конструктор по умолчанию с ревизией, которую я отправляю, в результате чего инициализированные списки ArrayLists будут доступны из перегруженного конструктора. Это правильно, или я совсем запутался?

Ответы [ 2 ]

12 голосов
/ 18 ноября 2010

Да, это правильно. Однако, чтобы исправить вашу терминологию:

  • Не существует "конструктора по умолчанию", за исключением, возможно, конструктора без параметров, которого нет в этом классе.
  • Это не имеет ничего общего с наследованием. Этот метод фактически называется конструкторским построением цепочек.
3 голосов
/ 18 ноября 2010

Это правильно, и этот метод называется конструкторской цепочкой. В этом сценарии вызов this может быть слабо представлен как:

Запустить указанный конструктор перед текущим конструктором

Они оба работают с одним и тем же экземпляром объекта, поэтому изменения во включенном состоянии видны в оригинале.

...