示例:
public class Name {
public string FirstName { get; private set; }
public string LastName { get; private set; }
private Name() { }
public Name(string firstName, string lastName) {
FirstName = firstName;
LastName = lastName;
}
}
当尝试实例化这个c#类时,intellisense会显示new关键字的私有和公共构造函数,即使其中一个构造函数是私有的!
更奇怪的是,当我从公共构造函数中删除第二个参数时(删除lastName作为公共构造函数的参数),intellisense现在只显示带有new关键字的公共构造函数。
这是一个错误还是我错过了什么?我正在使用VS2008 SP1。
编辑:代码清晰度
答案 0 :(得分:1)
答案 1 :(得分:0)
不知道为什么intellisense会向你展示奇怪的东西。但是,对于具有公共构造函数的域对象,您应该有一个抽象基类,因此您不必使用私有对象来处理对象。您还应该为您的主键等物品添加诸如此类的物品。
public abstract class BaseDomainObject{
public BaseDomainObject() { }
private int _id;
public virtual int Id { get { return _id; } set { _id = value; } }
}
public SomeDomainObject : BaseDomainObject{
...
}
答案 2 :(得分:0)
这可能是一个错误,但不值得努力修复。也就是因为有很多场景访问私有构造函数是合法的。请使用以下代码段。所有私有构造函数访问都是合法的
class Outer {
private Outer() {
}
public Outer Create() { return new Outer(); }
class Inner() {
void Function1() { new Outer(); }
class DoubleInner() {
void Function2() { new Outer(); }
}
}
}
答案 3 :(得分:0)
即使私有构造函数出现在Intellisense中,如果您尝试编译在不允许的情况下使用它的代码,编译器仍将通过“由于保护级别而无法访问”错误