C#部分方法不能有返回类型

C#部分方法又叫分部方法。部分方法在一个部分类中定义(没有方法体),在另一个部分类中实现。两个部分类中,都要使用partial 关键词。
部分方法可以是静态的,但总是私有的,且不能有返回值。使用的任何参数都不能是out参数,但可以是ref 参数。部分方法也不能使用virtual、abstract、override、new、seale和extern修饰符。
public partial class MyClass
{
partial void MyPartialMethod();
}
public partial class MyClass
{
partial void MyPartialMethod()
{
//Method implementation
}
}
关于为什么部分方法不能有返回值,以下来自网友回答,相对来说能认同的一个回答,但最后一句明显有错误。



“分部方法”的引入完全是为了代码注入的需要同时保持代码的高效。

比如说:
partial void OnBefore(string s);
partial void OnAfter(string s);
...
void SomeFunction()
{
    OnBefore(...);
    业务代码;
    OnAfter(...);
}

这是一个典型的场景,作为API的设计者,我们希望给调用它的程序员一个添加注入代码(比如权限审查、调试输出、或者日志等行为)的机会。

如果没有分部方法,那么OnBefore和OnAfter始终会被调用,哪怕这两个方法是空的。

有了分部方法,如果程序员不去写这两个方法,那么编译器会自动删除SomeFunction中的第一行和最后一行。

我们想想,如果这个分部方法是有返回值的,那么难保SomeFunction的编写者会写出这样的代码:
int result = OnBefore(...);
...
此时我们还能去掉这一行么?如果去了,那result哪里出呢?

一样的道理,out ref相当于给返回值,所以也被禁止。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值