我有以下课程:
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
正在突出显示。现在尝试Person
,Person
“构造函数”将自动突出显示。
我想要的是TextReader IntelliSense“行为”。
答案 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;
}
}
}