C# 3.0新特性之扩展方法

来源:互联网 发布:程序员写博客的好处 编辑:程序博客网 时间:2024/05/20 00:48

C#3.0扩展方法是给现有类型添加一个方法。现在类型既可是基本数据类型(如int,String等),也可以是自己定义的类。

//Demo--1//扩展基本类型namespace TestExtensionMethods{// 必须建一个静态类,用来包含要添加的扩展方法public static class Extensions{//要添加的扩展方法必须为一个静态方法//此方法参数列表必须以this开始 第二个即为要扩展的数据类型,在这里就是要扩展string类型//第三个就无所谓了,就是一对象名,名字随便,符合命名规则即可//综合来讲,此方法就是要给string类型添加一个叫TestMethod的方法,此方法返回一个int型的值,即返回调用此方法对象的长度。public static int TestMethod(this string s){return s.Length;}}//测试扩展方法类class Program{static void Main(string[] args){string str = "Hello Extension Methods";//调用扩展方法,必须用对象来调用int len = str.TestMethod();Console.WriteLine(len);}}}//Demo--2//扩展自定义类型,同时展示了扩展方法带参数情况,以及方法重载namespace TestExtendMethod{public class Student{public string Description(){return "Student.............";}public string Description(string name){return "the student’s name is "+name;}}// 必须建一个静态类,用来包含要添加的扩展方法public static class Extensions{//要添加的扩展方法必须为一个静态方法//此方法参数列表必须以this开始 第二个即为要扩展的数据类型,在这里就是要扩展Student类型//第三个就无所谓了,就是一对象名,名字随便,符合命名规则即可//综合来讲,此方法就是要给Student类型添加一个叫TestMethod的方法,此方法返回一个string型的值public static string TestMethod(this Student s){return s.Description();}//要添加的扩展方法必须为一个静态方法//此方法参数列表第一个参数表示要扩展哪一个类,第二个参数才表示此扩展方法的真正参数//综合来讲,此方法就是要给Student类型添加一个叫TestMethod的方法,此方法带有一个string类型的参数,并返回一个string型的值public static string TestMethod(this Student s,string name){return s.Description(name);}}//测试扩展方法类class Program{static void Main(string[] args){Student stu = new Student();//调用扩展方法,必须用对象来调用string mes = stu.TestMethod();Console.WriteLine(mes);//调用带参数的扩展方法,只要传第二个参数就可以了//因为他的第一个参数其实只是为了表明是扩展哪个数据类型mes = stu.TestMethod("李沉舟");Console.WriteLine(mes);}}}

  总结:

  1、扩展方法是给现有类型添加一个方法;

  2、扩展方法是通过 指定关键字this修饰方法的第一个参数;

  3、扩展方法必须声明在静态类中;

  4、扩展方法要通用对象来调用;

  5、扩展方法可以带参数。


可以使用扩展方法来扩展类或接口,但不能重写扩展方法。 与接口或类方法具有相同名称和签名的扩展方法永远不会被调用。 编译时,扩展方法的优先级总是比类型本身中定义的实例方法低。 换句话说,如果某个类型具有一个名为 Process(int i) 的方法,而您有一个具有相同签名的扩展方法,则编译器总是绑定到该实例方法。 当编译器遇到方法调用时,它首先在该类型的实例方法中寻找匹配的方法。 如果未找到任何匹配方法,编译器将搜索为该类型定义的任何扩展方法,并且绑定到它找到的第一个扩展方法。 下面的示例演示编译器如何确定要绑定到哪个扩展方法或实例方法。

0 0
原创粉丝点击