持有代表的通用类型?

时间:2013-12-11 22:41:39

标签: c# delegates

我有一个方法,它将ThreadStart作为参数,我通常称之为:

public void myMethod(ThreadStart ts) { ... }
myMethod(delegate () {...});

我希望将此委托分配给变量,然后再将其传递给函数。当我使用

Action myDel = delegate () {...};
myMethod(myDel);

..我收到一个关于没有匹配方法签名的错误。我可以使用哪种类型myDel,以便它可以与代表的实际主体互换使用?

2 个答案:

答案 0 :(得分:2)

为什么不将myDel定义为像这样的ThreadStart委托?

ThreadStart myDel = () => DoSomething();

ThreadStart 操作委托匹配的签名,但它们是不同的类型。所以你可以简单地将你的委托定义为ThreadStart ..

答案 1 :(得分:0)

这样做的原因是你不能将委托分配给另一个委托(只是因为两个类具有相同的字段并不意味着你应该能够将其视为另一个委托。同样的逻辑适用于委托) 请参阅Jon Skeet的post  “兼容性”并不一定意味着签名相同)

例如,您可以使用这种棘手的模式让代码工作

        Action myDel = delegate () {};
         myMethod( new ThreadStart(myDel));