在C#中使用null调用特定的构造函数

qui*_*uip 3 c# constructor

我有一个有几个构造函数的类,我想从另一个调用"main" - 但是使用null.

只使用this(null)结果编译时错误,所以我将null转换为其他构造函数的类型.编译好.

MyClass
{
  public MyClass(SomeType t)
  { }

  public MyClass(IList<FooType> l)
    : this((SomeType)null)
  { }
}
Run Code Online (Sandbox Code Playgroud)

这感觉,让我们说icky.这是好的,常见的还是疯狂的并且在类中显示出一个缺陷 - 它应该有一个空的构造函数?

"大多数"课程需要一个SomeType,但很少有人可以没有.我希望罕见的时间能够"坚持",并且明显表示"代码不是典型的".

Dav*_*ble 9

你需要演员,因为null它本身是模棱两可的.A null本身没有固有类型,因此转换告诉编译器要传递给哪个构造函数null.

话虽这么说,你的类使用默认(无参数)构造函数可能更有意义,就像你说的那样.拥有所有三个构造函数也可能没问题.


Guf*_*ffa 7

它确实只有轻微的气味.有时使用这种技术,但如果实际可行,我会避免使用它.

无参数构造函数通常比传递null更具描述性,如果只在类中使用它,则可以将其设置为私有:

MyClass {

  private MyClass() {
  }

  public MyClass(SomeType t) {
  }

  public MyClass(IList<FooType> l) : this() {
  }

}
Run Code Online (Sandbox Code Playgroud)

另一个替代方案(但是无法从构造函数调用的方法)是将代码放在静态方法中以稍微隔离它并为其提供更具描述性的名称:

MyClass {

  public MyClass(SomeType t) {
  }

  public static MyClass CreateEmptyInstance() {
    return new MyClass((SomeType)null);
  }

}
Run Code Online (Sandbox Code Playgroud)