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 修饰符。

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

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

    特点:

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

     

  • 相关阅读:
    Objective-C中 Self和 Super详解
    OC类方法和实例方法中的self区别
    Objective-C----MRC内存管理 、 自动释放池 、 面向对象三大特性及封装 、 继承 、 组合与聚合
    Objective-C对象初始化 、 实例方法和参数 、 类方法 、 工厂方法 、 单例模式
    Objective-C语言介绍 、 Objc与C语言 、 面向对象编程 、 类和对象 、 属性和方法 、 属性和实例变量
    联合与枚举 、 高级指针 、 C语言标准库(一)
    C语言--- 字符串数组 、 预处理器和预处理指令 、 多文件编程 、 结构体
    C语言----变量及作用域 、 指针 、 指针和数组 、 进程空间 、 字符串
    iOS开发环境C语言基础 数组 函数
    ios开发环境 分支语句 、 循环结构(for) 、 循环结构
  • 原文地址:https://www.cnblogs.com/my36z/p/1406834.html
Copyright © 2011-2022 走看看