泛型委託Action與func

2021-07-12 01:01:25 字數 2720 閱讀 4784

泛型委託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 委託封裝的方法的引數 返回值 此委託封裝的方法的返回...