защищенный против публичного конструктора для абстрактного класса?Есть ли разница? - PullRequest
35 голосов
/ 26 декабря 2010

Этот вопрос из любопытства.Есть ли разница между:

public abstract class MyClass
{
    public MyClass()
    {
    }
}

и

public abstract class MyClass
{
    protected MyClass()
    {
    }
}

Спасибо.

Ответы [ 3 ]

31 голосов
/ 26 декабря 2010

Они одинаковы для всех практических целей.

Но так как вы просили о различиях, я могу вспомнить одно отличие: если вы ищете конструктор класса с помощью отражения, то соответствующие BindingFlags будутразные.

BindingFlags flags = BindingFlags.Public | BindingFlags.Instance;
var constructor = typeof(MyClass).GetConstructor(flags, null, new Type[0], null);

Это найдет конструктор в одном случае, но не в другом.

16 голосов
/ 26 декабря 2010

У вас не должно быть публичного конструктора в классе Abstract Конструкторы на абстрактных типах могут вызываться только производными типами. Поскольку открытые конструкторы создают экземпляры типа, а вы не можете создавать экземпляры абстрактного типа, абстрактный тип с открытым конструктором создан неправильно.

смотрите здесь для деталей http://msdn.microsoft.com/en-us/library/ms182126.aspx

2 голосов
/ 26 декабря 2010

С точки зрения будущего использования этого кода, нет никакой разницы.

...