如何在c#中调用受保护的构造函数?

前端之家收集整理的这篇文章主要介绍了如何在c#中调用受保护的构造函数?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何调用受保护的构造函数
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());

解决方法

基本上只能从子类中调用它.您的FooMock类将已经调用受保护的构造函数,因为它相当于:
public class FooMock : Foo
{
    public FooMock() : base() // Call the protected base constructor
    {
    }
}

但是,您的断言将失败,因为被称为foo的对象的类型是FooMock,而不是Foo.

Foo形式的断言将会过去.

你不能通过直接调用受保护的构造函数来构造一个只有Foo的实例.它被保护而不是public的要点是确保它只被子类调用(或者在Foo本身的文本内).

有可能您可以在完全信任的背景下用反射来称呼它,但我会敦促您不要这样做.

猜你在找的C#相关文章