个人理解扩展方法是对某些类在不改变源码的基础上添加其他的方法。扩展方法必须是在非泛型的静态类里定义,且第一个参数是要使用this 指定需要扩展的类型。
class Program { static void Main(string[] args) { ExtensionDemo test = new ExtensionCreate().TestRun("Jennifer") //声明扩展方法 Console.WriteLine(test.FirstName + " " + test.LastName); Console.ReadKey(); } }
public class ExtensionCreate { public ExtensionDemo TestRun(string FirstName) { return new ExtensionDemo() { FirstName = FirstName };//声明并返回一个带有FirstName属性的对象 } }
public class ExtensionDemo //只有两个属性的类型 { public string LastName { get; set; } public string FirstName { get; set; } }
现在我们可以创建一个扩展方法,并且打印出来。或者创建另一个扩展方法为属性赋值
public static class ExtensionType { public static void ExtensionWrite(this ExtensionDemo demo) { Console.WriteLine(demo.FirstName + " " + demo.LastName);//输出全名名字 } public static void AssignmentLastName(this ExtensionDemo demo, string LastName) { demo.LastName = LastName;//对LastName属性进行赋值 } } test.ExtensionWrite(); test.AssignmentLastName("Aniston"); test.ExtensionWrite();
扩展方法可以使用类里的公共属性,私有属性不可调用。
public static class ExtensionType { public static void ExtensionWrite(this ExtensionDemo demo) { Console.WriteLine(demo.FirstName + " " + demo.LastName);//输出名字 } public static ExtensionDemo ExtensionTest(this ExtensionDemo demo, string LastName) { demo.LastName = LastName;//对LastName属性进行赋值 return demo; } } public class ExtensionCreate { //接受一个string类型参数,返回一个ExtensionDemo类型 public ExtensionDemo TestRun(string FirstName) { return new ExtensionDemo() { FirstName = FirstName }; } } ExtensionDemo test = new ExtensionCreate().TestRun("Jennifer") .ExtensionTest("Aniston"); // 这是扩展方法 test.ExtensionWrite()//打印名字