Нужно ли предоставлять пустой защищенный конструктор для абстрактного класса?
Я знаю, что конструкторы в абстрактных классах должны быть защищены в C#.
Но некоторым абстрактным классам не нужны беспараметрические конструкторы. Например:
public abstract MyAbstractClass {
public abstract Method1();
public abstract Method2();
// non-parameterless constructors are not needed
}
Мой вопрос в вышеприведенном классе, мне нужно предоставить пустой защищенный конструктор для переопределения неявного конструктора по умолчанию? То есть:
public abstract MyAbstractClass {
protected MyAbstractClass() { }
public abstract Method1();
public abstract Method2();
}
Если я не предоставлю этот пустой защищенный конструктор, будет неявный конструктор по умолчанию, который является открытым (правильно?). Это нарушает правило, что "конструкторы в абстрактных классах не должны быть публичными".
Но когда я проверяю исходный код ASP.NET MVC framework, я вижу, что они не предоставляют пустой защищенный конструктор для абстрактных классов. Итак, может быть, правило дизайна должно быть:
Если вы определяете конструкторы в абстрактных классах, они не должны быть публичными.
Если вам не нужны беспараметрические конструкторы в абстрактных классах, просто не определяйте их.
Какие-нибудь мысли?
1 ответ
Нет, вам не нужно объявлять защищенный конструктор по умолчанию. Если вам не нужно ничего делать в конструкторе вашего абстрактного класса, не объявляйте его. Если у вас есть что-то сделать, пометить его как защищенное будет так же, как пометить его как открытый, потому что базовый конструктор может вызываться только дочерним элементом, а дочерний элемент в любом случае имел бы защищенный доступ.