8扩展方法和分部方法

c#中有扩展方法和分部方法。

扩展方法可以对一个已经存在的类型(class)中的功能进行添加,而不用对已有类进行修改或者派生【派生的方式对于值类型或者sealed修饰的类型来说行不通】

在语法上: 扩展方法 要求所在的类型必须是一个静态类,并且扩展方法也是静态的【static修饰】,扩展方法只能用来对方法进行扩展,而不能扩展属性【property】,事件,委托等。扩展方法的第一个参数是要进行扩展的类型,并且有this关键字修饰。
格式大致如下:

static class StringExtention{
    public static int IndexOf(this String s,char c){
        ...
    }
}

需要注意的是: 对一个类型进行了扩展,它的派生类也将会可以使用这些扩展方法。
多个静态类可以定义相同的扩展方法。
扩展方法至少需要有一个参数,并且有this进行标识。
同时扩展方法不能用于具有泛型的静态类型中。

ps:编译器在看到有个this标识的参数时,会给这个方法,类型,程序集加上ExtentionAttribute特性。来加快对扩展方法的“搜索”【智能感知】【System.Core.dll中 ExtentionAttribute】

分部方法:
分部方法要求,所在的类型有partial标识,同时分部方法也有partial进行标识。CLR其实是不知道所谓的分部方法的,都是编译器在做。

通过使用分部方法,可以将一个类型中的操作分散在多个文件中,方便开发。
一般格式:

//t1.cs
partial class T{
    partial void func();

    public int tt(){
        ...
        func();
    }
}
//t2.cs
partial class T{
    partial void func(){
        ...
    }
}

需要注意的是: 分部方法的返回值必须是void,因为如果编译器没有找到分部方法 的实现部分【如果有返回值,那么就会出错】,同时,分部方法的参数不能有out修饰【不能是出参数】,道理也是同上。
分部方法前面不能有private等访问控制修饰符,所有的分部方法其实就是private的。分部方法的实现部分和声明部分应当严格的保持一致。

分部方法较为灵活,如果在没有分部方法存在时候,可能就需要使用virtual虚函数机制来进行,供派生类进行处理。因此对于sealed修饰的类显然就无法进行。同时,使用virtual机制,不管是否有派生类实现,那么这次调用还是会发生。而使用分部方法,如果没有找到分部方法的实现部分,那么就会省去对其的调用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值