3

例子:

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 作为公共构造函数的参数)时,智能感知现在只显示带有 new 关键字的公共构造函数,正确。

这是一个错误还是我在这里遗漏了什么?我正在使用 VS2008 SP1。

编辑:代码清晰度

4

4 回答 4

1

哇,这很奇怪。我只是在我的 VS2008 副本上自己尝试过(我也在运行 SP1)并且得到了完全相同的结果。当有多个参数时,私有构造函数会出现在 Intellisense 中,但只有一个时不会出现。我的猜测是,这是一个错误。

于 2008-12-09T06:06:02.990 回答
0

不知道为什么智能感知会向您显示奇怪的东西。但是你应该有一个带有公共构造函数的域对象的抽象基类,所以你不必用私有的对象来填充你的对象。您还应该将诸如主键的属性之类的东西放在那里。

public abstract class BaseDomainObject{
  public BaseDomainObject() { }

  private int _id;

  public virtual int Id { get { return _id; } set { _id = value; } }

}

public SomeDomainObject : BaseDomainObject{
  ...
}
于 2008-12-09T06:06:48.637 回答
0

这可能是一个错误,但不值得努力修复。即因为在许多情况下访问私有构造函数是合法的。采取以下代码片段。所有私有构造函数访问都是合法的

class Outer {
  private Outer() {
  }
  public Outer Create() { return new Outer(); }
  class Inner() { 
    void Function1() { new Outer(); }
    class DoubleInner() {
       void Function2() { new Outer(); }
    }
  }
}
于 2008-12-09T06:09:00.753 回答
0

即使私有构造函数出现在 Intellisense 中,如果您尝试编译在不允许的地方使用它的代码,编译器仍然会出现“由于保护级别而无法访问”错误

于 2009-05-28T10:17:46.530 回答