所以我有两种不同的方法。
一个是常规方法
void DoSomething(delegate x)
{
foreach(......)
{ x(); }
}
另一个是部分但未实现的
partial void DoWorkInForEach();
当我打电话给我这样的第一个方法时
DoSomething(DoWorkInForEach);
会发生什么,委托参数是否为null,我的整个方法调用是否会被删除?
答案 0 :(得分:4)
10.2.7部分方法
[...]
如果给出了定义声明但未给出实施声明 对于部分方法M,以下限制适用:
•创建方法委托(第7.6.10.5节)是编译时错误。
•确实如此 一个编译时错误,用于引用匿名函数中的M 转换为表达式树类型(第6.5.2节)。
•表达 作为M的调用的一部分发生不影响确定 赋值状态(第5.3节),可能导致编译时 错误。
•M不能是应用程序的入口点(§3.1)。
如果需要,你可以在这里使用lambda而不是method-group,这实际上会给你一个no-op委托:
DoSomething(() => DoWorkInForEach());
答案 1 :(得分:1)
根据MSDN:
您可以委托已定义和实现的部分方法,但不能委托仅定义的部分方法。
如果为部分方法M提供了定义声明但未给出实现声明,则以下限制适用: 创建方法委托是一种编译时错误(第7.6.10.5节)。
以下是正确:
partial class Foo
{
partial void Method();
Foo()
{
Action action = new Action(Method);
}
}
partial class Foo
{
partial void Method()
{
// ...
}
}
以下内容将引发编译错误:
无法从方法'Test.Foo.Method()'创建委托,因为它是没有实现声明的部分方法
partial class Foo
{
partial void Method();
Foo()
{
Action action = new Action(Method); // Compilation error
}
}