Подтвердить что ты не робот

Protected vs public constructor для абстрактного класса? Есть ли разница?

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

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

и

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

Спасибо.

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

смотрите здесь подробности http://msdn.microsoft.com/en-us/library/ms182126.aspx

Ответ 3

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