Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > not-public constructor


Автор: QryStaL 18.3.2008, 13:10
Иногда просматриваю рефлектором сборки .NET Framework и натыкаюсь на конструкции следующего вида:

Код

public class TypeExampe
{
    internal TypeExample( /*параметры*/ )
    {
        // Здесь код...
    }
    public static TypeExample Create()
    {
        return new TypeExample( /*параметры*/ );
    }
}


В чем суть? Почему просто не написать 

Код

    public TypeExample : this( /*параметры*/ )
    {
    }


?

Автор: tol05 18.3.2008, 14:18
потому что нельзя разрешать создавать объекты напрямую из внешнего кода. 
Это паттерн фабричный метод - класс содержит специальный метод, для дополнительных проверок, создания объекта, инициализаций и прочих танцев перед возвращением клиенту объекта...

В твоем конкретном случае объект создается через вызов статического метода, который уже внутри себя создает объект конструктором. Смысла в этом не вижу - это не синглетон, и разделения обязанностей по созданию объекта между конструктором и статическим методом я не наблюдается.

Автор: QryStaL 18.3.2008, 15:09
tol05, в том-то и дело, что проверок нету, и в статическом методе ровно одна строчка - создание и возврат экземпляра типа.

А в целом мысль понятна...

Автор: maxim1000 18.3.2008, 15:25
а в C# есть возможность создавать объекты разными способами (например, куча/стек)?
а то в C++ такие конструкции иногда используются для контроля за способом создания объекта

Автор: Dblma 18.3.2008, 15:46
Класс в C# всегда создается в куче. Структура (struct или Value-type) - всегда в стеке. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)