C#委托的简单使用

委托

委托的定义

如果我们要把方法当做参数传递的话,就需要用到委托。简单来说委托就是一个类型(所以无法在类中被声明),这个类型可以复制一个方法的引用。委托是C#实现回调函数的一种机制,用于当满足某种条件时就触发回调函数,实现所需方法的调用。具体示例可看观察者模式。

ps:静态类中的委托不能指向非静态的方法,也不能指向类的实例中的非静态方法。(自己敲下代码就知道了)

声明委托

使用委托的步骤:首先需要定义委托,然后告诉编译器这个委托可以指向哪些类型的方法,最后创建委托的实例。

定义一个委托要定义方法的参数和返回值,使用关键字delegate定义。

定义委托的语法:delegate void IntMethodInvoker(int x);

如上面这个委托指向的方法要带有一个int类型的参数,而且方法的返回值是void

其他案例:

delegate double TwoLongOp(long first,long second);

delegate string GetString();

 

基本使用

实例1

private delegate string GetAString();

int x = 40;

//第一种调用方式:

GetAString a = new GetAString(x.ToString);

string s = a();

//第二种调用方式:

GetAString a =x.ToString;

string s = a.Invoke();

 

Console.WriteLine(s);

Console.ReadKey();

 

 

实例2(将委托作为方法参数传递)

private delegate void PrintString();

 

static void PrintStr(PrintString Print)

{Print();}

 

static void Method1()

{Console.WriteLine(“Method1”);}

 

Main中:

PrintString ps = Method1;//同实例1

PrintStr(ps);

Console.ReadKey();

 

Action委托

Antion是系统内置(预定义)的一种委托类型,它可以指向一个没有返回值0-16个参数的方法。

 

实例1:(指向无参函数)Action

static void Print()

{Console.WriteLine(“This is Action”);}

 

Main中:

Action a = Print;

a();//亦可a.Invoke();

Console.ReadKey();

 

实例2:(指向有参函数)Action<T0 T1,T T2......T T15>

static void AddInt(int i1,int i2)

{Console.WriteLine(i1+i2);}

 

Main中:

Action<int,int> a = AddInt;

a(11,22);//a.Invoke(11,22);

Console.ReadKey(); 

 

Func委托

Func是系统内置(预定义)的一种委托类型,它可以指向一个返回值0-15个参数的方法(所以<>内至少得有一个参数)

Func<T T0,T T1.......out T15>

实例:

static string GetIntAdd(int i1,int i2)

{ return (i1+i2).ToString() };

 

Main中:

Func<int,int,string> f = GetIntAdd;

Console.WriteLine( f(11,22) ) ;

Console.ReadKey(); 

 

Action委托和Func委托都是系统预定义的委托,某些情况下懒得定义委托时可以直接使用这两种类型

C#委托的简单使用

上一篇:Windows 2012 R2设置同一用户同时多点远程系统:


下一篇:delphi取win10输入法 (转自qdac)