C# 3.0 新特性----扩展方法

转自 http://www.cnblogs.com/jiejie_peng/archive/2010/04/08/1707195.html

C# 3.0 新特性----扩展方法

  1. 主要目的
    掌握对一个已经编译的类的方法的扩展
  2. 特别注意
    a. 扩展某个类时,新建的类要使用 public static 修饰,因为默认的类是 internal 访问修饰符
    b. 这个类要有文件作用域,即不能作为嵌套类使用
    c. 扩展方法要声明为静态的
    d. 扩展方法的第一个参数类型即是要扩展的类,且该参数前要加 this 关键字
    e. 扩展类的命名很重要,当NET Framework 类库更新时,若更新后的类库中,添加了与你先前自定义的静态扩展类相同的类名,则会隐藏掉自定义的静态扩展类 
  3. 具体实现
    如下代码实现添加一个扩展 object 类的方法,因为 .net 中所有的类都继承自 object 类,故调用时,随意选择了 int 类型
    代码如下:

    代码

    
    

    1 public static class ExtendObject
    2 {
    3 public static void ShowTypeInfo(this object obj)
    4 {
    5 Console.WriteLine("my datatype is {0}", obj.GetType().Name);
    6 }
    7 }

    调用时的代码如下:
    可以有两种调用方法:一是实例调用,二是扩展类名调用

    代码

    
    

    1 class Program
    2 {
    3 static void Main(string[] args)
    4 {
    5 int a = 192;
    6 //使用类实例调用静态方法
    7   a.ShowTypeInfo();
    8
    9 //使用静态类名调用静态方法
    10   ExtendObject.ShowTypeInfo(a);
    11 Console.Read();
    12 }
    13 }

     
    特别需要注意的是,扩展类与被扩展的类是两个不同的类,故扩展类中的类方法访问被扩展类的成员时,只能访问声明为 public 修饰符的成员。

    代码如下:

    被扩展的类:Bird

    
    

    class Bird
    {
    private string _bType;
    public string BType
    {
    get;
    set;
    }
    }

    扩展类 ExtendBird

    
    

    1 public static class ExtendBird
    2 {
    3 public static void SetBirdType(this Bird b, string birdType)
    4 {
    5 //公共属性,可以访问
    6 b.BType = birdType;
    7
    8 //会出现编译错误
    9 _bType = birdType;
    10 }
    11 }

 

时间: 2024-11-02 20:54:26

C# 3.0 新特性----扩展方法的相关文章

iOS8新特性扩展(Extension)应用之四——自定义键盘控件

iOS8新特性扩展(Extension)应用之四--自定义键盘控件         iOS8系统的开放第三方键盘,使得用户在输入法的选择上更加自主灵活,也更加贴近不同语言的输入风格.这篇博客,将介绍如何开发一个第三方的键盘控件. 一.了解UIInputViewController类         UIInputViewController是系统扩展支持键盘扩展的一个类,通过这个类,我们可以自定义一款我们自己的键盘提供给系统使用.         首先,我们先来看一下这个类中的一些属性和方法:

PHP 5昨天隆重推出--PHP 5/Zend Engine 2.0新特性

前言    今天突然想到PHP官方网站上一转,一眼就看到PHP5推出的通告.虽然以前看到过PHP5的预告,但还是仔细看了PHP 5/Zend Engine 2.0新特性一文,一股JAVA气息扑面而来...   特将该文试译出来,首发于CSDN网站,以飨读者. PHP 5/Zend Engine 2.0新特性徐唤春 译 sfwebsite@hotmail.comhttp://www.php.net/zend-engine-2.php 全新的对象模型PHP中的对象处理部分已完全重写,具有更佳的性能和

ASP 3.0新特性概要

 ASP 3.0新特性概要 在ASP3.0中,有一些新的特性或经历较大的变化或改进的特性.1. 无脚本的ASPASP处理不包括任何脚本的.asp页的速度是很快的,假如你正在创建的站点或Web应用程序文件最终可能使用ASP,最好让这些文件使用.asp文件扩展名,而不用考虑它们是包含服务器端脚本还是仅仅包含静态(HTML和文本)内容. 2. 新的流向控制能力到目前为止,假如想把执行转向另外的一个ASP页,不得不使用Response.Redirect语句,这个工作通过向客户端发送一个响应来指示其载入新

iOS8新特性扩展(Extension)应用之三——照片编辑插件

iOS8新特性扩展(Extension)应用之三--照片编辑插件         通过前几篇博客的介绍,我们了解到扩展给app提供的更加强大的交互能力,这种强大的交互能力另一方面体现在照片编辑插件的应用.        和通常一样,我们先创建一个工程,然后新建一个Target,选择photo editing: 从模板中,我们可以看到系统为我们创建了一个controller,这个controller就是用于处理照片的controller,其中方法如下: ? 1 2 3 4 5 6 7 8 9 10

[WCF 4.0新特性] 标准终结点与无(.SVC)文件服务激活

今天介绍WCF 4.0的另外两个新特性:标准终结点(Standard Endpoint)和无(.SVC)文件服务激活(File-Less Activation).前者实现了针对典型通信场景对终结点的定制,后者让你在进行IIS/WAS的服务寄宿中无须定义.svc文件. 一.标准终结点 我们知道,绑定的本质就是一系列相关绑定元素的有序集合,而系统绑定就是基于若干典型的通信场景对相关绑定元素的整合.WCF通过系统绑定对绑定元素进行了定制,那么能否在终结点级别对组成该终结点的ABC(地址.绑定和契约)也

[C#]6.0新特性浅谈

原文:[C#]6.0新特性浅谈 C#6.0出来也有很长一段时间了,虽然新的特性和语法趋于稳定,但是对于大多数程序猿来说,想在工作中用上C#6.0估计还得等上不短的一段时间.所以现在再来聊一聊新版本带来的新特性可能也还不算晚吧? 一.nameof关键字 这绝对是整个新版本最让我期待的内容,它给代码重构带来了巨大的便利.先来看一下它是怎么使用的吧: string s; Console.WriteLine(nameof(s)); s = nameof(s.Length); Console.WriteL

PHP 5昨天隆重推出--PHP 5/Zend Engine 2.0新特性_php基础

前言    今天突然想到PHP官方网站上一转,一眼就看到PHP5推出的通告.虽然以前看到过PHP5的预告,但还是仔细看了PHP 5/Zend Engine 2.0新特性一文,一股JAVA气息扑面而来...   特将该文试译出来,首发于CSDN网站,以飨读者. PHP 5/Zend Engine 2.0新特性徐唤春 译 sfwebsite@hotmail.comhttp://www.php.net/zend-engine-2.php 全新的对象模型PHP中的对象处理部分已完全重写,具有更佳的性能和

Android5.0新特性详解之全新的动画_Android

 在Material Design设计中,为用户与app交互反馈他们的动作行为和提供了视觉上的连贯性.Material主题为控件和Activity的过渡提供了一些默认的动画,在android L上,允许自定义这些动画: Touch feedback 触摸反馈 Circular Reveal 圆形展示 Curved motion 曲线运动 View state changes 视图状态变化 Vector Drawables 矢量图动画 Activity transitions 活动转场 触摸反馈

Visual Studio 2015速递(1)——C#6.0新特性怎么用

  系列文章  Visual Studio 2015速递(1)--C#6.0新特性怎么用 Visual Studio 2015速递(2)--提升效率和质量(VS2015核心竞争力) Visual Studio 2015速递(3)--ASP.NET 新特性   对于IDE的争论这个话题,在开发部已经由来已久,甚至可以追溯到微软.NET技术发布之前,当时的主打产品是ActiveX控件,随着Borland Delphi的快速崛起,RAD势不可挡,迅速催生了很多经典的IDE,微软旗下最有名气的就是VC和