zoukankan      html  css  js  c++  java
  • 回顾C#3.0新特性(2)

    三 扩展方法

    让我想起了设计模式中的装饰器(Decorator)

    (我将在“C#3.0设计模式”的阅读笔记中描述)。

    QQ截图未命名

    其实.net内部很多方法已经是扩展方法了。看图标,普通的方法图标下带一个箭号的。上图就是LINQ的截图。

    扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。

    下面向string扩展了一个方法(扩展方法可以写在不同的命名空间)

    namespace ExtensionMethods
    {
        public static class MyExtensions
        {
            public static int WordCount(this String str)
            {
                return str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries).Length;
            }
        }   
    }

    扩展方法必须是静态类中的静态方法。需要扩展的属性作为参数放入规则同上,加了一个this.

    调用。(如果不在同一个命名空间要记得引用一下)

    string s = "Hello Extension Methods";
    int i = s.WordCount();

    如果扩展方法和原类方法冲突则优先绑定原类方法

    四 分部类和方法

    可以将类或结构、接口或方法的定义拆分到两个或多个源文件中。每个源文件包含类型或方法定义的一部分,编译应用程序时将把所有部分组合起来。

    关键字是 partial

    其实早在 vs2003 升级到 vs2005 大家就体验过了。在原先的vs2003里面窗体的代码全在一个.cs里面。所以一些控件的定义、设置和自己写的代码都在一个文件里面。vs2005刚开始用的时候还挺不习惯的,控件的定义都找不到了。原来放在了另一个文件里 Designer.cs。其实这就是分布类 partial。

    分布方法应该是在C#3.0才开始支持的。

    • 分部方法声明必须以上下文关键字 partial 开头,并且方法必须返回 void。

    • 分部方法可以有 ref 参数,但不能有 out 参数。

    • 分部方法为隐式 private 方法,因此不能为 virtual 方法。

    • 分部方法不能为 extern 方法,因为主体的存在确定了方法是在定义还是在实现。

    • 分部方法可以有 static 和 unsafe 修饰符。

    • 分部方法可以为泛型的。约束将放在定义分部方法声明上,但也可以选择重复放在实现声明上。参数和类型参数名称在实现声明和定义声明中不必相同。

    • 不能将委托转换为分部方法。

    特点:

    分布类定义后不一定要实现,在编译时会自动移除方法以及对方法的所有调用。

     

  • 相关阅读:
    面试题总结
    h5c3新特性
    redis常用命令大全
    windows下挂载linux的nfs网络硬盘
    mysql之char、varchar、text对比
    Lua与C的交互
    通信模型socket
    程序编译流程
    区块链共识机制(POW、POS、DPOS等)的优缺点
    .net c#获取自定义Attribute
  • 原文地址:https://www.cnblogs.com/my36z/p/1406834.html
Copyright © 2011-2022 走看看