C# 若类并没有接口,我可以使用伪存根吗?

C# 若类并没有接口,我可以使用伪存根吗?,c#,.net,microsoft-fakes,C#,.net,Microsoft Fakes,如果一个类没有接口,我可以使用存根吗 我正在尝试存根一个类的方法。该类没有接口。该类在Fakes intellisense中显示为存根。该方法也存在,但当我尝试模拟该方法时,我得到了设计时错误: Cannot assign to 'MyMethod' because it is a 'method group' 代码 StubClassA classAStub = new StubClassA(); classAStub.MyMethod = (paramA, paramB) => {r

如果一个类没有接口,我可以使用存根吗

我正在尝试存根一个类的方法。该类没有接口。该类在Fakes intellisense中显示为存根。该方法也存在,但当我尝试模拟该方法时,我得到了设计时错误:

Cannot assign to 'MyMethod' because it is a 'method group'
代码

StubClassA classAStub = new StubClassA();
classAStub.MyMethod = (paramA, paramB) => {return 10;};
发生这种情况是因为类没有接口吗?如果是这样,为什么要生成存根


是否是我唯一可以使用垫片的选项?

Fakes为程序集中每个未密封的类创建存根,并存根可以重写的每个方法。存根纯粹是基于继承的,没有任何魔力。如果
MyMethod
能够被存根,它将显示为名为
MyMethodParamType1ParamType2
的委托属性

如果要覆盖普通代码无法覆盖的内容,则需要垫片。垫片使用某种模糊的魔法在运行时修改IL,并用委托替换方法。通常,它们的使用暗示了代码中可能存在的弱点,但不管怎样,您都可以使用它们


我个人建议,如果类型确实需要独立于它的契约(这是您的问题所暗示的),则使用接口。

Fakes为程序集中的每个未密封类创建存根,并存根可以重写的每个方法。存根纯粹是基于继承的,没有任何魔力。如果
MyMethod
能够被存根,它将显示为名为
MyMethodParamType1ParamType2
的委托属性

如果要覆盖普通代码无法覆盖的内容,则需要垫片。垫片使用某种模糊的魔法在运行时修改IL,并用委托替换方法。通常,它们的使用暗示了代码中可能存在的弱点,但不管怎样,您都可以使用它们


我个人建议,如果类型确实需要独立于它的契约(这是您的问题所暗示的),则使用接口。

如前所述,“独立于它的契约”,类后面没有接口。你的回答没有提供任何关于什么是错误的额外信息。它准确地解释了什么是错误的。根据我的回答,任何被密封的方法都不会产生存根委托,在C#中,默认情况下方法是密封的。“独立于它的契约”,如前所述,类后面没有接口。你的回答没有提供任何关于什么是错误的额外信息。它准确地解释了什么是错误的。根据我的回答,任何被密封的方法都不会产生存根委托,在C#中,默认情况下方法是密封的。