在不调用构造函数的情况下调用实例方法

Ser*_*gel 1 c# methods constructor instance

假设我有以下课程,我不允许改变:

public class C
{
    public C() { CreateSideEffects(); }
    public void M() { DoSomethingUseful(); }
}
Run Code Online (Sandbox Code Playgroud)

我必须在不调用构造函数的情况下调用M. 可能吗?

Gui*_*ume 8

即使它不是一个好的想法,是的,我们可以;)与FormatterServices.GetUninitializedObject.

C uninitializedC = (C)FormatterServices.GetUninitializedObject(typeof(C));
uninitializedC.M();
Run Code Online (Sandbox Code Playgroud)


Nei*_*ell 7

不.因为C.M()是实例方法,您需要创建一个实例,这意味着调用构造函数.

C你的团队拥有一类?如果是这样,但是你有责任不管它,那么你最好游说:

  1. 那些副作用被重构和删除
  2. C.M()方法的功能搬到了另一个类或做静态的.

如果C是从第三方,你将有麻烦,可能要复制的功能,C.M()在你的方法自己.