//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、扩展方法可以带参数。