如何实现静态类中的自定义委托?

时间:2014-06-22 15:53:38

标签: c# .net delegates

我想写一个通用方法,它允许我使用一个测试方法模式,它返回一个带有结果的布尔值并输出一个字符串消息:

public delegate bool TestMethodDelegate<string, bool>(out string message);

我在静态类中使用它(并在该类中声明):

public static void ExecuteTestMethodDelegate(TestDelegate<string, bool> aTestMethod)
{
    // do repeated stuff before
    string message;
    bool result = aTestMethod(out message);
    // do repeated stuff after
}

现在我想从代码中的多个位置调用此方法,但无法正确使用...尝试了几个选项,例如:

string message;
CommonTests.ExecuteTestMethodDelegate(() => return IsAppInstalled(out message));

毋庸置疑,这不会编译......任何帮助都将受到赞赏。

3 个答案:

答案 0 :(得分:2)

您需要从委托中删除通用参数:

public delegate bool TestMethodDelegate(out string message);

public static void ExecuteTestMethodDelegate(TestMethodDelegate aTestMethod) { .. }

答案 1 :(得分:1)

委托可以包含类型参数,但是你拥有的是无效的 - 你不能指定它,它应该声明:

public delegate bool TestMethodDelegate(out string message);

执行:

CommonTests.ExecuteTestMethodDelegate(IsAppInstalled);

如果您希望从静态方法输出消息并返回结果,则必须更改静态方法的签名:

public static bool ExecuteTestMethodDelegate(TestMethodDelegate method, out string message)
{
    // do repeated stuff before
    bool result = method(out message);
    // do repeated stuff after

    return result;
}

答案 2 :(得分:1)

它不允许写:

public delegate bool TestMethodDelegate<string, bool>(out string message);

因为您尝试使用stringbool作为类型来声明通用委托。那么:

public delegate bool TestMethodDelegate<T>(out T message);

public static void ExecuteTestMethodDelegate(TestDelegate<string> aTestMethod)
{
   string message;
   bool result = aTestMethod(out message);
}

所以你可以这样做:

CommonTests.ExecuteTestMethodDelegate(IsAppInstalled);

但是你可以看到你不能在这里使用message。所以一个非常简单的解决方案可能是:

public static void ExecuteTestMethodDelegate(TestMethodDelegate<string> aTestMethod, out string aParameter){
    bool result = aTestMethod(out aParameter);
}

然后:

string message;
CommonTests.ExecuteTestMethodDelegate(IsAppInstalled, out message);