【发布时间】:2012-12-10 14:17:24
【问题描述】:
我正在慢慢了解委托,因为委托的签名也必须与它所委托的方法的签名相匹配。
但是,请查看以下代码。
public static void Save()
{
ThreadStart threadStart = delegate
{
SaveToDatabase();
};
new Thread(threadStart).Start();
}
private static void SaveToDatabase() { }
我现在被难住了,因为代表返回 void(这就是 SaveToDatabase() 的意思)但是,它显然返回了 ThreadStart... 或者是吗?
如果我要编写自己的委托,我将不知道如何实现这一点,因为委托必须是 void 才能匹配 SaveToDatabase() 的返回类型。但它不可能;它的类型是ThreadStart!
我的问题是,我是否完全误解了,或者这是否通过一些 .NET 诡计而成为可能?如果我想编写此方法但要创建自己的委托,我会怎么做?
【问题讨论】:
-
为什么不
ThreadStart threadStart=new ThreadStart(SaveToDatabase); -
我认为没有返回任何内容,因为没有
return关键字。我认为正在创建一个新的thread,它将执行委托所指向的方法。 -
@Some1.Kill.The.DJ - 从长远来看,它实际上会采用一些参数。
-
这是一个匿名方法,与委托关系不大。他们有点老派,这些天你会使用 lambda 表达式。 msdn.microsoft.com/en-us/library/0yw3tz5k%28v=VS.80%29.aspx
-
是的,具有讽刺意味的是,我可以用 Lamda's 做到这一点(我开始使用 .net 3.5 / 4.0 学习,但我正在使用 2.0 的项目)!