Unity使用C#高階特性擴充套件方法
阿新 • • 發佈:2019-02-02
C#擴充套件方法
最近在工作中遇到一個問題,即在不修改原始類的情況下,為類新增新的方法和屬性,於是在C#的高階特性中發現瞭解決方案:擴充套件方法
下面的擴充套件方法的定義:
擴充套件方法有兩個限制:1 方法必須的定義在靜態類中(類中所有的擴充套件都是靜態的);2 所有擴充套件方法都需要使用this關鍵字對第一個引數(並且僅對第一個引數)進行修飾(用this限定的引數表示被擴充套件的項);下面的這個類中定義了兩個擴充套件方法:
using System; using System.Reflection; /// <summary> /// C#高階特性擴充套件方法學習 /// </summary> public static class Sample { // 本方法任何物件顯示它所處的程式集// public static void DisplayDefiningAssembly(this object obj) { Debug.Log(obj.GetType().Name + "lives here: => " +Assembly.GetAssembly(obj.GetType()).GetName().Name); } // 本方法允許任何整形返回倒置的副本,例56返回65// public static int ReverseDigits(this int i) { //把int翻譯成string然後獲取所有的字串 // char[] digts = i.ToString().ToCharArray(); //反轉陣列的項// Array.Reverse(digts); // 放回string// string newDigts = new string(digts); //使用int值返回修改後的字串// return int.Parse(newDigts); } }
每個擴充套件方法的第一個引數型別前都使用了關鍵字this,大多數情況下擴充套件方法的第一個引數表示被擴充套件的型別
DisplayDefiningAssembly()被定義為用於擴充套件System.Object,所以這個程式集中所有的物件都是使用這個擴充套件方法,Reverse()方法只被定義用作整數型別,
下面的具體的呼叫:
public class ExtensionMethod : MonoBehaviour { void Start() { int myInt = 1234567; myInt.DisplayDefiningAssembly(); string myString = "I'm a string"; myString.DisplayDefiningAssembly(); //使用int的新功能// Debug.Log("Value of myInt:" + myInt.ToString()); Debug.Log("Reverse digts of myInt: " + myInt.ReverseDigits()); } }