c# - 如何在 C# 中调用 protected 构造函数?

标签 c# inheritance constructor

如何调用 protected 构造函数?

public class Foo{
  public Foo(a lot of arguments){}
  protected Foo(){}
}
var foo=???

这显然没有通过测试:

public class FooMock:Foo{}
var foo=new FooMock();
Assert(typeof(Foo), foo.GetType());

最佳答案

调用无参数保护/私有(private)构造函数:

Foo foo = (Foo)Activator.CreateInstance(typeof(Foo), true);

调用带参数的非公共(public)构造函数:

  var foo = (Foo)typeof(Foo)
    .GetConstructor(
      BindingFlags.NonPublic | BindingFlags.CreateInstance | BindingFlags.Instance, 
      null, 
      new[] { typeof(double) }, 
      null
    )
    .Invoke(new object[] { 1.0 });

  class Foo
  {
     private Foo(double x){...}
  }

关于c# - 如何在 C# 中调用 protected 构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4365745/

相关文章:

c# - 在 C# 中增加 WCF Web 服务的超时

c++ - 在不浪费内存的情况下扩充数据结构

javascript - 我可以在不使用 new 关键字的情况下构造 JavaScript 对象吗?

java - 使用泛型类层次结构时出现编译错误

constructor - Swift - 使构造函数参数上的标签可选?

C# 有哪些替代方法可以沿调用链传播事件?

c# - 在转换器 (IValueConverter) 中使用 "await"不起作用?

c++ - 努力理解 C++ 模板实例化

c# - Python 到 C# 移植后的错误计算

c++ - 防止在 C++ 中构造/初始化数组元素