委託 C#

  這些就是本身的理解.ide

  委託的用處就是把方法傳遞給其餘方法.spa

1委託的使用更類差很少,也 是須要先定義再實例化.編譯器

2Action<T>和Func<T>委託string

3多播委託it

4.匿名方法io

5Lambda表達式編譯

6訪問外部變量class

 

1委託的使用更類差很少,也 是須要先定義再實例化.效率

public class A
{
public string Aaa(string str)
{
return str;
}
}變量

public partial class MainWindow : Window
{
private delegate string lianxidelegate(string str);--定義一個帶一個參數的返回一個string類型的委託
public MainWindow()
{
lianxidelegate l = new lianxidelegate(new A().Aaa);--實例化此委託
MessageBox.Show(l("aaa"));--調用
InitializeComponent();
}
}

2Action<T>和Func<T>委託

Action<T>表示引用一個void返回類型的方法,最多能夠傳遞16種不一樣的參數類型

Func<T> 表示引用能帶返回類型值的方法

public MainWindow()
{
Func<string,string> op=new A().Aaa;
MessageBox.Show(op("a"));
InitializeComponent();
}

3多播委託

一個委託包含多個方法,這樣的委託就是多播委託

就好比剛纔A類裏面還有個方法Aaaa

public MainWindow()
{
Func<string,string> op=new A().Aaa;
op += new A().Aaaa;
MessageBox.Show(op("a"));
InitializeComponent();
}

多播委託能夠識別+和+=,-和-=是刪除方法調用.

須要注意的是他調用兩個方法,兩個方法都返回值,最後的返回值是最後一個方法的.若是一個方法異常了,那下面的方法就不會執行了.這時候你就須要循環了.

public class A
{
public string Aaa(string str)
{
return str;
}
public string Aaaa(string str)
{
return "dfsd";
}
public void No(string str)
{
MessageBox.Show(str);
}
public void No2(string str)
{
MessageBox.Show(str);
}
}

 

public MainWindow()
{
Action<string> daaa=new A().No;
daaa += new A().No2;
Delegate[] deletates = daaa.GetInvocationList();
foreach (var @delegate in deletates)
{
daaa("aaa");
}
InitializeComponent();
}

4.匿名方法

public MainWindow()
{
Func<string, string> aaaaaa = delegate(string str)   //就是這塊直接寫,不用定義
{
return str;
};
MessageBox.Show(aaaaaa("aaaaaaa"));
InitializeComponent();
}

不過匿名方法,編譯器會本身定義一個方法,其實和不匿名是同樣的,只是代碼好看了,效率並無提升.匿名方法用的時候不能使用跳轉語句,不能跳出去,也不能跳進來.

5Lambda表達式

比匿名方法更好的一種方法就是用Lambda(只是我的喜愛)

public MainWindow()
{
Func<string, string> aaaaaa = canshu =>
{
return canshu;
};
MessageBox.Show(aaaaaa("aaaaaaa"));
InitializeComponent();
}

多個參數就這麼幹就行

Func<string,string,string> aaaaaa = (canshu1,canshu2)=>
{
return canshu1 + canshu2;
};
MessageBox.Show(aaaaaa("aaaaaaa","bbbbbbb"));

6訪問外部變量

string cc = "cccc";
Func<string,string,string> aaaaaa = (canshu1,canshu2)=>
{
return canshu1 + canshu2+cc;
};
MessageBox.Show(aaaaaa("aaaaaaa","bbbbbbb"));

固然匿名方法也能夠訪問

相關文章
相關標籤/搜索