delegate, Action, Func

//------------------------------------------------------------------------------
// <auto-generated>
//     此代码由工具生成。
//     运行时版本:4.0.30319.33440
//
//     对此文件的更改可能会导致不正确的行为,并且如果
//     重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
//委托类型, 为一个对象的方法建立一个委托实例. 
//通过这个委托实例调用该对象的方法.
//其实就是把对象方法的执行: "()"动作给抽离了.
using System;
namespace _004_委托
{
	public class Program
	{
		private delegate string GetToString ();//定义一个委托类型, 为的是指向Object.toString()方法.
		static void Main (string[] args)
		{
			int x = 36;
			/*string s = x.ToString ();//toString方法来把数据转换成字符串
			Console.WriteLine (s);*/

			//使用委托类型,创建实例.
			GetToString gts = new GetToString (x.ToString);
			//gts绑定了x.ToString方法.
			string s = gts ();//通过委托实例gts调用x中的ToString方法.

			// 第二种方法, 直接把函数地址赋值给委托类型的变量.
			GetToString gts2 = x.ToString;
			string s2 = gts2.Invoke (); // 通过Invoke方法调用gts2引用的方法.

			Console.WriteLine (s);


			Method method;
			method = Method1;
			method.Invoke ();
			method = Method2;
			method.Invoke ();

			//委托类型作为方法参数调用
			PrintString methodPrint;
			methodPrint = Method1;
			PrintStr (methodPrint);
			methodPrint = Method2;
			PrintStr (methodPrint);



		}
		//把委托类型作为方法的参数
		private delegate void PrintString ();
		static void PrintStr (PrintString print)
		{
			print ();// 间接地调用了委托类型
		}


		private delegate void Method ();

		private static void Method1 ()
		{
			Console.WriteLine ("Method1");
		}

		
		private static void Method2 ()
		{
			Console.WriteLine ("Method2");
		}

		public Program ()
		{
		}
	}
}
//------------------------------------------------------------------------------
// <auto-generated>
//     此代码由工具生成。
//     运行时版本:4.0.30319.33440
//
//     对此文件的更改可能会导致不正确的行为,并且如果
//     重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
using System;
namespace Solution5
{
	public class Program
	{
		static void PrintString ()
		{
			Console.WriteLine ("Hello,world.");
		}
		static void PrintInt (int i)
		{
			Console.WriteLine ("i 等于" + i);
		}
		public Program ()
		{
			/*Action a = PrintString;// 委托类型a指向一个没有参数没有返回值的方法Method1*/
			Action<int> b = PrintInt;


		}
		static void Main ()
		{

		}
	}
}
//------------------------------------------------------------------------------
// <auto-generated>
//     此代码由工具生成。
//     运行时版本:4.0.30319.33440
//
//     对此文件的更改可能会导致不正确的行为,并且如果
//     重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
using System;
namespace Solution6
{
	public class Program
	{
		static void PrintString ()
		{
			Console.WriteLine ("Hello,world.");
		}
		static void PrintInt (int x, int y)
		{
			Console.WriteLine (x + y);
		}
		public Program ()
		{
		}
		static void Main ()
		{
			int[,] table = new int[10, 20];

			Action a = PrintString;
			a ();
			Action<int,int> a1 = PrintInt;
			a1 (32, 12);
		}
	}
}

猜你喜欢

转载自hypercube.iteye.com/blog/2251882