Ser*_*gel 1 c# methods constructor instance
假设我有以下课程,我不允许改变:
public class C
{
public C() { CreateSideEffects(); }
public void M() { DoSomethingUseful(); }
}
Run Code Online (Sandbox Code Playgroud)
我必须在不调用构造函数的情况下调用M. 可能吗?
即使它不是一个好的想法,是的,我们可以;)与FormatterServices.GetUninitializedObject.
C uninitializedC = (C)FormatterServices.GetUninitializedObject(typeof(C));
uninitializedC.M();
Run Code Online (Sandbox Code Playgroud)
不.因为C.M()
是实例方法,您需要创建一个实例,这意味着调用构造函数.
是C
你的团队拥有一类?如果是这样,但是你有责任不管它,那么你最好游说:
C.M()
方法的功能搬到了另一个类或做静态的.如果C
是从第三方,你将有麻烦,可能要复制的功能,C.M()
在你的方法做自己.