无法实例化的类

时间:2011-03-23 10:41:30

标签: c# oop

我有以下课程:

public class Person
{
    public String Name { get; set; }

    internal Person()
    {
        this.Name = "Ian";
    }

    public static Person Initialize()
    {
        return new Person();
    }
}

因为构造函数是内部的,所以当外部程序集试图实例化Person时,编译器将抛出编译错误“类型Person没有定义构造函数”。这是预期的行为,因为我希望用户通过静态Initialize方法实例化类,如下所示:

Person p = Person.Initialize();

但是,IntelliSense仍然显示Person作为可实例化的类(在您键入new关键字后列出)。

有没有办法在IntelliSense中“隐藏”构造函数,因为它具有误导性?或者我的设计出了什么问题?

修改 问题是如何在IntelliSense中“隐藏”构造函数,因为它具有误导性。

打开Visual Studio并键入以下内容:

System.IO.TextReader a = new 

正如您所看到的,Intellisense中没有TextReader正在突出显示。现在尝试PersonPerson“构造函数”将自动突出显示。

我想要的是TextReader IntelliSense“行为”。

2 个答案:

答案 0 :(得分:2)

内部表示可以在整个程序集中访问它。所以这就是IntelliSense仍然显示构造函数的原因。

您想要的是私有受保护

私有表示只能在班级内调用。

protected 表示可以在类和所有派生类中调用它。 (如果你想从单例类派生,这是一个很好的选择。)

有关辅助功能的更多信息:Accessibility Levels (C# Reference)

答案 1 :(得分:1)

你要做的事情被称为“单身人士”......

这是这样一个类的基本设计:

public class Singleton
{
   private static Singleton instance;

   private Singleton() {}

   public static Singleton Instance
   {
      get 
      {
         if (instance == null)
         {
            instance = new Singleton();
         }
         return instance;
      }
   }
}

更多信息:http://msdn.microsoft.com/en-us/library/ff650316.aspx