фабричный класс, который предотвращает прямую реализацию - PullRequest
4 голосов
/ 24 октября 2010

Как создать фабричный класс, который предотвращает прямое создание экземпляров класса?

скажем, у меня есть класс Comment, который должен создаваться только из класса CommentFactory.Я не хочу, чтобы Comment можно было создавать напрямую.

Я подумал, что смогу сделать это:

  public partial class Comment
  {
    private Comment(){}
    public Comment CreateComment(User user,string str)
    {
       Comment cmt=new Comment();
       user.AddComment(cmt);
       cmt.User=user;
       return cmt;       
    }
  }

этот код чистый?Проблема, с которой я сталкиваюсь, заключается в том, что Comment является частичным классом с частичной реализацией, выполненной Linq для SQL.и Linq to SQL создает открытый конструктор этого класса, так как я могу обойти это?есть ли какой-нибудь «трюк»?

Ответы [ 3 ]

0 голосов
/ 24 октября 2010

Вы можете пометить конструктор internal для сборки, в которой находится CommentFactory, и затем получить доступ к классу CommentFactory.Я не уверен, как еще «навязать» это.

0 голосов
/ 24 октября 2010

На ваш вопрос можно ответить здесь . Это не совсем то же самое, но решения будут почти идентичны.

Я полагаю, что есть как минимум 3 трюка для решения вашего вопроса, так что это увеличит вашу гибкость

0 голосов
/ 24 октября 2010

Если Comment и CommentFactory находятся в одной сборке, создание внутренних конструкторов Comment не позволит любому коду вне сборки создавать экземпляры Comment.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...