如何在不在.NET中声明委托的情况下将方法作为参数传递

时间:2009-05-12 23:33:53

标签: .net parameters methods delegates

无论我如何尝试,我都无法模仿Rhino Mocks的干净语法,而无需声明代表。

示例:

Expect.Call(service.HelloWorld("Thanks"))

您对如何做到这一点有任何想法吗?

感谢。

3 个答案:

答案 0 :(得分:7)

您可以使用较新版本的.NET

中提供的Action委托
void Execute(Action action) {
    action();
}

void Test() {
    Execute(() => Console.WriteLine("Hello World!"));
}

答案 1 :(得分:6)

在3.5中使用Lambda语法,您可以获得类似的语法。

public void Call(Action action)
{
    action();
}

Expect.Call(() => service.HelloWorld("Thanks"));

Moq是一个模拟框架,它使用Lambda语法进行模拟。

var mock = new Mock<IService>();
mock.Setup(service => service.HelloWorld("Thanks")).Returns(42);

答案 2 :(得分:0)

在Rhino Mocks中,它实际上是在调用该方法。此时对象处于设置模式,当您调用它时,它正在记录参数和设置期望值。这就是为什么你可以摆脱委托语法。不幸的是,在许多其他情况下实际上并不可能。