泛型委託action和fun兩類特殊的委託,這兩個特殊的委託是dot framewrok自帶的。結合lambda表示式,可以在寫程式時,簡潔**和提高編碼效率。
(一)action和fun兩個委託的不同點:
action只能委託必須是無返回值的方法
fun只是委託必須有返回值的方法
set
}private int instanceage; //年齡
public int instanceage
set
}public person(string name, int age) //建構函式
public void displayname() //輸出姓名
", this.instancename);
}public void displayname(string name) //輸出姓名
", name);
}public void displayage(int age) //輸出姓名
", age);
}public void displaynameandage(string name, int age) //輸出姓名和年齡
and age: ", name, age));
}public int getagebyname(string name) //根據姓名獲得年齡
else
}#endregion
}class program
static void main(string args)
", s); };
actionprintnameatfirst(person.instancename);
//(2)簡化
actionactionprintname;
actionprintname = s => console.writeline("name:", s);
actionprintname(person.instancename);
//示例演示如何使用 action委託來列印 list物件的內容
//使用 print 方法將列表的內容顯示到控制台上。 此外,c# 示例還演示如何使用匿名方法將內容顯示到控制台上
//請注意該示例不顯式宣告 action變數。 相反,它傳遞方法的引用,該方法採用單個引數而且不將值返回至 list.foreach 方法,其單個引數是乙個 action委託
// 同樣,在 c# 示例 中,action委託不被顯式地例項化,因為匿名方法的簽名匹配 list.foreach 方法所期望的 action委託的簽名。
listnames = new list();
names.add("bruce");
names.add("alfred");
names.add("tim");
names.add("richard");
names.foreach(print);
names.foreach(delegate(string name) );
#endregion
#region fun相關
//泛型委託func委託,這裡可以有乙個或多個或者沒有引數t,但必須有返回值並返回 tresult 引數所指定的型別的值
//(1)必須有指定引數返回值。
//(2)lambda 表示式的基礎型別是泛型 func 委託之一。 這樣能以引數形式傳遞 lambda 表示式,而不用顯式將其分配給委託。
//(3)因為 system.linq 命名空間中許多態別方法具有 func引數,因此可以給這些方法傳遞 lambda 表示式,而不用顯式例項化 func委託。
//非泛型委託實現
returnname returnname = person.getagebyname;
console.writeline("age:", returnname(person.instancename));
//泛型委託實現
funcfunreturnname = person.getagebyname;
console.writeline("age:", funreturnname(person.instancename));
//泛型匿名委託實現
//(1)初步
funcfunreturnname1 = delegate(string s) ;
console.writeline("age:", funreturnname1(person.instancename));
//(2)優化
funcfunreturnname2 = s => person.getagebyname(s);
console.writeline("age:", funreturnname2(person.instancename));
//示例演示如何宣告和使用 func委託
//此示例宣告乙個 func變數,並為其分配了乙個將字串中的字元轉換為大寫的 lambda 表示式。
//隨後將封裝此方法的委託傳遞給 enumerable.select 方法,以將字串陣列中的字串更改為大寫。
funcselector = str => str.toupper();
ienumerableawords = words.select(selector);
foreach (string word in awords)
console.writeline(word);
#endregion
console.readkey();}}
}
委託, 泛型委託,Func和Action
使用委託來做一些事情,大致思路是 1 定義宣告乙個委託,規定輸入引數和輸出型別。2 寫幾個符合委託定義的方法。3 把方法列表賦值給委託 4 執行委託 internal delegate int mydelegate class programconsole.readkey static ienume...
Action和Func泛型委託
1.泛型action委託表示引用乙個void返回型別的方法。因為這個委託類存在不同的變體,所以可 以傳遞至多16種不同的引數型別。沒有泛型引數的action類可呼叫沒有引數的方法。action 呼叫帶乙個引數的方法,action呼叫帶兩個引數的方法,action呼叫帶8個引數的方法。2,func委託...
Func泛型委託
描述 封裝乙個具有乙個引數並返回tresult引數指定的型別值的方法.語法 public delegate tresult func t arg 引數型別 t 此委託封裝的方法的引數型別.tresult 此委託封裝的方法的返回值型別.引數 arg 委託封裝的方法的引數 返回值 此委託封裝的方法的返回...