将函数作为接口方法定义中的参数传递

时间:2012-09-26 15:16:01

标签: c# interface .net-3.5 parameters lambda

我目前正尝试使用(可能)C#的Func或Action类型处理lambda。

我想创建一个名为IMyInterface的接口,它定义了一个名为CreateCRUD的方法。这应该采取5个参数。第一个是字符串。接下来的四个是调用创建,读取,更新和删除方法的函数。

interface IMyInterface
{
    void CreateCRUD(string name, Action<void> createFunc, Action<void> readFunc, Action<void> updateFunc, Action<void> deleteFunc);
}

四个函数定义不应该没有参数,也不返回任何参数。上面的代码不能编译。请指出我正确的方向。

3 个答案:

答案 0 :(得分:4)

改为使用非通用Action

interface IMyInterface
{
    void CreateCRUD(string name, Action createFunc, Action readFunc, Action updateFunc, Action deleteFunc);
}

答案 1 :(得分:1)

Action<T>

  

封装具有单个参数但不返回的方法   价值。

因此,您尝试使用void类型的一个参数强制委托。

您需要做的就是使用Action而不使用类型:

interface IMyInterface
{
    void CreateCRUD(string name, Action createFunc, Action readFunc, Action updateFunc, Action deleteFunc);
}

如果您想在代理中强制参数类型,那么您可以使用Action<T>,例如Action<int>,其中表示带有int参数的方法。

答案 2 :(得分:0)

这样的东西
Public delegate Action<T> MyActionDelegate;

interface IMyInterface 
{     
void CreateCRUD(string name, MyActionDelegate createFunc, MyActionDelegate readFunc, MyActionDelegate updateFunc, MyActionDelegate deleteFunc); 
}