Почему делегаты являются пустыми, а не пустой список, когда нет никакого подписчика?

Я хотел предоставить некоторую информацию, которая не была упомянута до сих пор. Если вы используете вызов this(...) в конструкторе, то вы не можете вызвать super(...);. Это также включает автоматическую вставку Java вызова без параметров в super();

. Следующий пример иллюстрирует это пункт, включая пояснительные комментарии:

public class B extends A {
    private int x;

    public B() {
        // Java doesn't call super(); here, because 
        // of the call to this(...); below.
        // You can't call super(...) here either,
        // for the same reason.

        this(42);  // Calls public B(int x) below.
    }

    public B(int x) {
        // Java does call super(); here.
        // You can call super(...) here, if you want/need to.
        // The net result of calling new B() above is that
        // super(...) for class A only gets called once.

        this.x = x;
    }
}
8
задан Matt Davis 2 November 2009 в 03:56
поделиться

3 ответа

На уровне CLR поля делегатов и поля событий являются обычными полями.

Так же, как строка MyField по умолчанию имеет значение null , а не ] "" , также Action MyField по умолчанию имеет значение null , а не пустой экземпляр Action .

8
ответ дан 5 December 2019 в 14:04
поделиться

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

2
ответ дан 5 December 2019 в 14:04
поделиться

См. Ответ Джона Скита здесь для хорошего обсуждения этого. Можно даже обойтись без проверки на null в C # 2.0.

2
ответ дан 5 December 2019 в 14:04
поделиться
Другие вопросы по тегам:

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