當一個類的實體的方法被賦給一個委托物件時,在背景關系中不僅要維護這個方法,還要維護這個方法所在的實體,System.Delegate 類的Target屬性指向的就是這個實體,舉個例子:
class Program { static void Main(string[] args) { X x = new X(); ProgressReporter p = x.InstanceProgress; p(1); Console.WriteLine(p.Target == x); // True Console.WriteLine(p.Method); // Void InstanceProgress(Int32)
} static void WriteProgressToConsole(int percentComplete) { Console.WriteLine(percentComplete+"%"); } static void WriteProgressToFile(int percentComplete) { System.IO.File.AppendAllText("progress.txt", percentComplete + "%"); } } class X { public void InstanceProgress(int percentComplete) { // do something
} }
但對于靜態方法,System.Delegate 類的Target屬性是Null,所以將靜態方法賦值給委托時性能更優,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/69591.html
標籤:其他
