2012-01-18 5 views
2

Кто-то спросить меня, что мы делаем объект класса, имеющего частный конструкторМы делаем объект класса с помощью частного конструктора?

для Eg

Class Parent 
    { 
     Private Parent() 
     { 
     } 
    } 

Поскольку я сделал частный конструктор для класса Parent.so, очевидно, что мы не можем сделать объект родительского класса. Но есть ли способ создать объект класса Parent без изменения частного конструктора?

Заранее спасибо

+1

Я думаю, что мы * понимаем * пример, но в качестве подсказки: при подаче примера предпочтительно публиковать фактический код, который будет компилироваться, если только вопрос не связан с проблемой компиляции - поэтому 'class' и' private' –

ответ

3

Вы не можете создать экземпляр Parentвне этого класса, но:

  • Вы можете создавать классы, полученные из Parent, если они вложенной классы внутри родителя, и те могут иметь не-частные построенные.
  • Код (включая статические методы, чаще всего) в пределах типа Parent может создавать экземпляры Parent, поэтому у вас может быть статический заводский метод, но не выставлять какие-либо конструкторы напрямую. Например:

    public class Parent 
    { 
        private Parent {} 
    
        public static Parent CreateParent() 
        { 
         return new Parent(); 
        } 
    } 
    

Это иногда может быть полезно иметь такого рода подход, если вы хотите применить аргумент проверки (и т.д.) перед тем создания экземпляра типа, и поэтому вы хотите заставлять все через названные фабричные методы. Это также упрощает чтение кода, особенно если вы хотите иметь разные способы создания экземпляра из одного и того же числа значений. TimeSpan.FromSeconds, TimeSpan.FromMinutes и т. Д. Являются хорошими примерами этого.

1

Да, вы можете получить доступ к закрытому конструктору в Parent класса. Поэтому это допускается:

class Parent 
{ 
    private Parent() 
    { 
    } 

    public static Parent Create() 
    { 
     return new Parent(); 
    } 
} 
0

Это один из способов реализации шаблона одноэлементного дизайна. Вы можете иметь публичное статическое поле в своем классе и getter для него. И когда ваш класс загружен, экземпляр в нем будет создан, и вы не сможете создать новый экземпляр вне вашего класса, но вы сможете получить единственный экземпляр. Here - пример.

0

Вы можете написать публичный статический метод в этом классе, который создает объект этого класса и возвращает его. Вот как шаблон Singleton обычно применяется на некоторых языках.

1

Вы можете использовать Reflection, но это можно считать обманом, чтобы обойти оригинальный дизайн.

Если у вас есть класс, вы должны использовать Factory, включив в класс родителя статический метод, который возвращает экземпляр вашего объекта.

Смежные вопросы