Protected vs public constructor для абстрактного класса? Есть ли разница?
Этот вопрос из любопытства. Есть ли разница между:
public abstract class MyClass
{
public MyClass()
{
}
}
и
public abstract class MyClass
{
protected MyClass()
{
}
}
Спасибо.
Ответ 1
Они одинаковы для всех практических целей.
Но так как вы просили разницу, я бы мог подумать о том, что вы ищете конструктор класса с использованием отражения, тогда соответствующие BindingFlags будут разными.
BindingFlags flags = BindingFlags.Public | BindingFlags.Instance;
var constructor = typeof(MyClass).GetConstructor(flags, null, new Type[0], null);
Это найдет конструктор в одном случае, но не другой.
Ответ 2
У вас не должно быть публичного конструктора в абстрактном классе
Конструкторы на абстрактных типах могут вызываться только производными типами. Поскольку публичные конструкторы создают экземпляры типа, и вы не можете создавать экземпляры абстрактного типа, абстрактный тип с открытым конструктором неправильно разработан.