C# Delegates: Step by Step
1.委托的使用与如何调用方法的常规思想背道而驰。在常规方法调用期间,您将创建一个对象,其中包含要调用的方法,调用该方法并传递所需的参数。一切都发生在一个弹出窗口中,包括定义要调用的对象和方法以及调用该调用。通过委派的方法调用采用了不同的方法。它将方法调用的定义和方法的实际调用分为两部分。委托是方法的地址的.NET版本。它们是类型安全的类,用于定义返回类型和参数类型。委托类不仅包含对方法的引用,而且还包含对多个方法的引用。尽管自.NET 2.0以来,代表就已经存在,但今天他们在.NET 4中起着重要的作用。 Lambda表达式与委托直接相关。当参数是委托类型时,可以使用Lambda表达式来实现从委托引用的方法。存在将方法传递给其他方法的情况的委托。
2.
1 using System; 2 public class Test 3 { 4 public delegate int CalculationHandler(int x, int y); 5 static void Main(string[] args) 6 { 7 Math math = new Math(); 8 //create a new instance of the delegate class 9 10 CalculationHandler sumHandler = new CalculationHandler(math.Sum); 11 //invoke the delegate 12 int result = sumHandler(8,9); 13 Console.WriteLine("Result is: " + result); 14 } 15 } 16 17 public class Math 18 { 19 public int Sum(int x, int y) 20 { 21 return x + y; 22 } 23 }
封装在委托中的有关方法的信息可以分为两类:方法签名和方法目标。
方法签名包括有关方法参数的数量和类型以及返回类型的信息。
方法目标包括方法的名称和方法所在的对象。当我们创建一个封装方法调用的委托对象时,我们必须提供这两套信息。
3.Demo
1 public delegate double UnitConversion(double from); 2 3 class QuickDelegateDemo 4 { 5 // 2. Define handler method. 6 public static double FeetToInches(double feet) 7 { 8 return feet * 12; 9 } 10 11 static void Main() 12 { 13 // 3. Create delegate instance. 14 UnitConversion doConversion = new UnitConversion(FeetToInches); 15 16 Console.WriteLine("Feet to Inches Converter"); 17 Console.WriteLine("------------------------ "); 18 19 Console.Write("Please enter feet: "); 20 double feet = Double.Parse(Console.ReadLine()); 21 22 // 4. Use delegate just like a method. 23 double inches = doConversion(feet); 24 25 Console.WriteLine(" {0} Feet = {1} Inches. ", feet, inches); 26 Console.ReadLine(); 27 } 28 }
总结:1.委托其实就是类,具体说就是方法类。