标签:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DelegateDemo1 { class Program { /// <summary> /// 定义一个返回string,没有参数的委托 delegate:委托关键字 /// </summary> /// <returns></returns> delegate string GetAString(); /// <summary> /// 定义一个没有返回值,带一个int类型参数的委托 /// </summary> /// <param name="x"></param> delegate void IntMethodInvokder(int x); /// <summary> /// 定义一个返回double,带2个参数的委托 定义委托:等同于定义一个新类 /// </summary> /// <param name="first"></param> /// <param name="second"></param> /// <returns></returns> delegate double TwoLongOp(long first, long second); delegate double DoubleOp(double x); static void ProcessAndDisplayNumber(DoubleOp action, double value) { //action:调用方法的函数地址,从内存读取 所以通过传递进来的方法名 就可以调用对应的函数 double result = action(value); Console.WriteLine("values is " + value + " result is " + result); } static void Main(string[] args) { int x = 40; //x.ToString:方法的地址 x.ToString():调用方法 GetAString firstStringMethod = x.ToString; //简单应用委托 Console.WriteLine("firstStringMethod " + firstStringMethod()); //定义委托数组 数组的元素是方法名(方法的内存地址) DoubleOp[] operations = { MathOperations.MultiplyByTwo, MathOperations.Squre }; for (int i = 0; i < operations.Length; i++) { ProcessAndDisplayNumber(operations[i], 3.0); } Console.ReadKey(); } } class MathOperations { public static double MultiplyByTwo(double value) { return value * 2; } public static double Squre(double value) { return value * value; } } }
标签:
原文地址:http://blog.csdn.net/rose_girls/article/details/51331927