有没有办法在构造函数中强制显式参数类型?

The*_*ist 1 c# constructor explicit

是否有类似于C#中构造函数的explicit关键字?它似乎只影响C#中的强制转换操作符.

举个例子:

public Foo( long value )
{
    m_value = value;
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是一种使以下代码无法编译的方法:

int bar = 10;
Foo fail = new Foo( bar );
Run Code Online (Sandbox Code Playgroud)

这可能在C#中吗?

Guf*_*ffa 14

您可以通过添加构造函数的重载来引发编译器错误,该构造函数int会将其标记为过时:

public class Foo {

  private long m_value;

  public Foo(long value) {
    m_value = value;
  }

  [Obsolete("The constructor has to be called with a long value, not an int value.", true)]
  public Foo(int value) {}

}
Run Code Online (Sandbox Code Playgroud)

通过指定它true作为第二个参数Obsolete将导致编译器错误而不是通常的警告.

  • @karim:通过为第二个参数指定`true`,它将导致错误而不是警告.(当你写评论时,我恰好在问题中澄清了这一点.) (3认同)