C# Extension Method 擴充套件方法
阿新 • • 發佈:2018-11-12
擴充套件方法是C# 3.0的新特性。它為現有的型別新增方法,從而解決了使用繼承擴充套件所帶來的所有弊端。
Demo 1 簡單的擴充套件方法
using System; namespace ExtensionMethod { class Program { static void Main(string[] args) { string s = null; Console.WriteLine("字串str為空字串: " + s.AddMethod_IsNull()); Console.WriteLine("字串str長度: " + s.AddMethod_Length()); Console.Read(); } } //在靜態類中定義擴充套件方法 static class NullExten { //為string型別定義擴充套件方法AddMethod_IsNull。 public static bool AddMethod_IsNull(this string str) { return null == str; } //為string型別定義擴充套件方法AddMethod_Length public static int AddMethod_Length(this string str) { if(str!=null) { return str.Length; } else { return 0; } } } }
Demo 2 擴充套件方法的呼叫順序
using System; namespace ExtensionMethodSequence { using AnotherNameSpace; class Program { static void Main(string[] args) { Person p = new Person() { Name = "Daniel" }; p.Print();//無參,呼叫本名稱空間 p.Print("Hello");//一個引數,呼叫另一名稱空間。 Console.Read(); } } public class Person { public string Name { get; set; } } public static class ExtensionClass { //ExtensionMethodSequence 名稱空間下的只帶一個引數的擴充套件方法,相當於無參 public static void Print(this Person per) { Console.WriteLine("呼叫當前名稱空間下的擴充套件方法,姓名為:{0}", per.Name); } } } namespace AnotherNameSpace { //引用 using ExtensionMethodSequence; public static class ExtensionClass1 { //AnotherNameSpace 名稱空間下的只帶一個引數的擴充套件方法 public static void Print(this Person per, string s)//using ExtensionMethodSequence使Person有意義 { Console.WriteLine("呼叫另一名稱空間下的擴充套件方法,姓名為:{0},增加引數:{1}", per.Name,s); } public static void Print(this Person per) { Console.WriteLine("呼叫另一名稱空間下的擴充套件方法,姓名為:{0}", per.Name); } } }