как мне вызвать оба инициализатора конструктора, base () и this ()?

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

Я провожу самопроверку своего кода, чтобы «укрепить» его для повторного использования, и я только что пришел к выводу:

public partial class TrackTyped : Component
{
    IContainer components = null;

    public TrackTyped()
        : base()
    {
        InitializeComponent();
    }

    public TrackTyped(IContainer container)
        : base()
    {
        container.Add(this);
        InitializeComponent();
    }
}

Когда я вижу одну и ту же строку кода в двух конструкторах, я обычно делаю один вызовите другого с помощью "this ()", но я не могу этого сделать.

Если я правильно прочитал спецификацию (я только начал пытаться читать спецификацию, поэтому я могу ошибаться):

10.11 Instance Constructors
   constructor-declarator:
      identifier   (   formal-parameter-listopt   )   constructor-initializeropt
   constructor-initializer:
      :   base   (   argument-listopt   )
      :   this   (   argument-listopt   )

Он говорит У меня может быть только один из них.

ВОПРОС: 10.11 означает, что нет причин вызывать оба, или это просто означает, что язык поддерживает только один вызов?

33
задан skaffman 17 July 2011 в 13:46
поделиться

1 ответ

Похоже, это то, что вы хотите:

public partial class TrackTyped : Component
{
    IContainer components = null;

    public TrackTyped()
        : base()
    {
        InitializeComponent();
    }

    public TrackTyped(IContainer container)
        : this()
    {
        container.Add(this);
    }
}

Порядок операторов во втором конструкторе теперь другой. Если это имеет значение, то на самом деле нет хорошего способа сделать то, что вы хотите, поскольку, даже если у вас одна и та же строка , функциональность немного отличается. В этом случае вам просто нужно будет повторить одну строку. Не парься.

И вы правильно читаете спецификацию: она должна быть одна или другая.

10
ответ дан 27 November 2019 в 18:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: