【发布时间】:2014-11-12 02:04:31
【问题描述】:
我有以下带有私有重载构造函数的类
class Car
{
string _Make;
string _Model;
Car(string make, string model)
{
_Make = make;
_Model = model;
}
}
然后我尝试调用上述类的默认构造函数
class Daytona
{
public int Foo()
{
Car c = new Car(); //COMPILATION ERROR
return 0;
}
}
注意两个类都在同一个命名空间中!
我无法使用默认构造函数创建 Car 的实例。但是我是否创建了默认构造函数,我应该能够访问默认构造函数。但我为什么会出现这个错误?
好吧,VS 2010 发生了一些不好的事情,当我重新启动我的机器时,VS 2010 编译了上面的代码。这样问题就解决了。
它是我的编译器,当我重新编译它时,再次带来了错误,在" Car c = new Car();" 行中,错误是 MyNamespace.Car.Car(string, string) is inaccessible due to its protection level p>
但是我想把这个顶部拖到一个新区域,为什么有人要创建一个私有构造函数? (以上代码仅供测试!)
【问题讨论】:
-
你很少需要
private构造函数(单例就是这样)仔细考虑你使用的是什么! -
当您想强制所有调用者使用公共缓存或对象池时,私有构造函数也相当常见。静态工厂方法而不是构造函数允许类作者控制何时创建实例。
标签: c#