在我的类中,我声明了一个委托类型,我正在创建它的一个实例,然后从该实例调用 BeginInvoke:
public class ClassA
{
...
public delegate bool MyDelegate(int x);
...
public void MethodA()
{
...
var myDelegate = new MyDelegate(Foo);
myDelegate.BeginInvoke(...);
...
}
...
}
在为 MethodA 编写单元测试时,我实际上并不希望调用 BeginInvoke。我想做的是使用 Moles 框架来消除 BeginInvoke 调用。通常,我会尝试
MMyDelegate.AllInstances.BeginInvoke... = (...) => { /* something here */ }
但我一直无法让痣为 MyDelegate 类型生成任何东西。
根据http://msdn.microsoft.com/en-us/library/system.delegate.aspx,“公共语言运行时为每个委托类型提供 BeginInvoke 和 EndInvoke 方法”。如果是这种情况,并且 BeginInvoke 甚至不是 Delegate 类中的一个方法(由 CLR 提供),是否有可能破坏它?有没有其他人有幸将 BeginInvoke 从委托类型中剔除?