C# 阻止直接实例化的工厂类

C# 阻止直接实例化的工厂类,c#,.net,design-patterns,C#,.net,Design Patterns,如何创建阻止类直接实例化的工厂类 比如说,我有一个类注释,它应该只从类注释工厂实例化。 我不希望注释能够被直接实例化 我想我可以做到: public partial class Comment { private Comment(){} public Comment CreateComment(User user,string str) { Comment cmt=new Comment(); user.AddComment(cmt);

如何创建阻止类直接实例化的工厂类

比如说,我有一个类注释,它应该只从类注释工厂实例化。 我不希望注释能够被直接实例化

我想我可以做到:

  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;       
    }
  }
这个代码干净吗


现在,我面临的问题是注释是一个部分类,由LINQtoSQL完成部分实现。LINQtoSQL创建了这个类的公共构造函数,那么我如何才能避免这个问题呢?是否存在任何“技巧”?

如果Comment和CommentFactory位于同一程序集中,将所有Comment构造函数设置为internal将阻止程序集外部的任何代码创建Comment实例。

您可以将构造函数标记为CommentFactory所在的程序集,然后让使用者访问CommentFactory类。我不知道如何“强制”它。

你的问题可以得到回答。这并不完全相同,但解决方案几乎相同


我认为至少有3个技巧可以解决您的问题,因此它将为您增加更多的灵活性。

是的,我不想访问注释构造函数的代码位于同一程序集中。要创建不同的程序集,我是否应该创建一个新的dll项目?是的,如果创建一个新的dll项目,该项目中的任何代码都将无法创建注释实例,只要注释的构造函数是
内部的