c#委托delegate

委托是一种数据类型,想类一样的一种数据类型,一般都是直接在命名空间中定义

public delegate void MyDelegate();

MyDelegate md = Method;

md();

public static void Method()

{

     ....

}

匿名方法

public delegate void MyDelegate();

MyDelegate  md = delegate()

{

    ....

};

md();

lambda

无参数:

public delegate void MyDelegate();

MyDelegate  md = () =>{...};

md();

 有一个参数:

public delegate void MyDelegate1(string str);

MyDelegate1 md = m =>{string str0 = m;};

md("nihao!");

有多个参数:

public delegate string strDelegate(string str1,string str2);

strDelegate strD = (str1,str2)=>{return str1+str2};

string strRs = strD(str1,str2);

委托与接口

1.委托可以解决的问题,接口都可以解决

2.什么情况下更适合使用委托而不是接口呢?当下列条件之一满足时:

接口只能定义一个方法

需要多播能力

订阅者需要多次实现接口

泛型委托

Func

System命名空间

delegate TResult Func

delegate TResult Func

delegate TResult Func

Func委托只有一个泛型版本的,没有非泛型版本的

Func fun = M2;

int intRs = fun(100,300);

public static int M2(int n1,int n2)

{

    return n1+n2;

}

Action

delegate void Action

delegate void Action

delegate void Action

无参数无返回

Action action1 = new Action(M1);

action1();

public static void M1()

{

    ...

}

Action泛型版本,就是一个无返回值,但是参数可以变化的委托

Action a2 = (x,y) =>{int c = x+y;};

a2(100,300);

你可能感兴趣的:(c#委托delegate)