C# 3.0新特性之扩展方法
2014-04-14 22:57
281 查看
C#3.0扩展方法是给现有类型添加一个方法。现在类型既可是基本数据类型(如int,String等),也可以是自己定义的类。
总结:
1、扩展方法是给现有类型添加一个方法;
2、扩展方法是通过 指定关键字this修饰方法的第一个参数;
3、扩展方法必须声明在静态类中;
4、扩展方法要通用对象来调用;
5、扩展方法可以带参数。
可以使用扩展方法来扩展类或接口,但不能重写扩展方法。 与接口或类方法具有相同名称和签名的扩展方法永远不会被调用。 编译时,扩展方法的优先级总是比类型本身中定义的实例方法低。 换句话说,如果某个类型具有一个名为 Process(int
i) 的方法,而您有一个具有相同签名的扩展方法,则编译器总是绑定到该实例方法。 当编译器遇到方法调用时,它首先在该类型的实例方法中寻找匹配的方法。 如果未找到任何匹配方法,编译器将搜索为该类型定义的任何扩展方法,并且绑定到它找到的第一个扩展方法。 下面的示例演示编译器如何确定要绑定到哪个扩展方法或实例方法。
//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) 的方法,而您有一个具有相同签名的扩展方法,则编译器总是绑定到该实例方法。 当编译器遇到方法调用时,它首先在该类型的实例方法中寻找匹配的方法。 如果未找到任何匹配方法,编译器将搜索为该类型定义的任何扩展方法,并且绑定到它找到的第一个扩展方法。 下面的示例演示编译器如何确定要绑定到哪个扩展方法或实例方法。
相关文章推荐
- C# 3.0 特性之扩展方法
- C# 3.0新特性初步研究 Part2:使用扩展方法_C#教程
- C# 3.0 新特性:扩展方法初探
- VS 2008 + .NET 3.5 - C# 3.0新特性之Automatic Properties(自动属性)、Object Initializers(对象初始化器)、Collection Initializers(集合初始化器)和Extension Methods(扩展方法)
- C# 3.0新特性初步研究 Part2:使用扩展方法
- 步步为营VS 2008 + .NET 3.5(3) - C# 3.0新特性之Automatic Properties(自动属性)、Object Initializers(对象初始化器)、Collection Initializers(集合初始化器)和Extension Methods(扩展方法)
- C# 3.0新特性之扩展方法
- C# 3.0新特性之扩展方法
- C# 3.0新特性之扩展方法
- C# 3.0新特性初步研究 Part2:使用扩展方法_C#教程
- 3、步步为营VS 2008 + .NET 3.5(3) - C# 3.0新特性之Automatic Properties(自动属性)、Object Initializers(对象初始化器)、Collection Initializers(集合初始化器)和Extension Methods(扩展方法)
- C# 3.0 新特性----扩展方法
- C# 3.0新特性初步研究 Part2:使用扩展方法_C#教程
- C# 3.0 新特性:扩展方法初探(转)
- C# 3.0新特性之扩展方法
- C# 3.0新特性之扩展方法(转)
- C# 3.0新特性之扩展方法
- C# 3.0 新特性:扩展方法初探
- C# 3.0 新特性 学习(二):匿名类型、扩展方法
- C#3.0新特性:扩展方法