使用委託來做一些事情,大致思路是:
1、定義宣告乙個委託,規定輸入引數和輸出型別。
2、寫幾個符合委託定義的方法。
3、把方法列表賦值給委託
4、執行委託
internal delegate int mydelegate();
class program
console.readkey();
}
static ienumerable<int> getallreturnvals(mydelegate mydelegate)
}
static int returnone()
static int returntwo()
}
以上,委託的返回型別是int,如果讓返回型別是泛型呢?只要讓以上的getallreturnvals方法針對泛型就可以了。
internal delegate t mydelegate<t>();
class program
mydelegate<string
> d1 = returna;
d1 += returnb;
foreach (string s in getallreturnvals(d1))
console.readkey();
}
//返回所有委託方法的執行結果
static ienumerable<t> getallreturnvals<
t>(mydelegate<
t> mydelegate)
}
static int returnone()
static int returntwo()
static string returna()
static string returnb()
}
不過,.net還為我們準備了乙個更"懶 "的方法,那就是針對泛型的委託func,這下,連委託都不要事先宣告了。func的<>中的泛型列表的最後乙個是返回型別,其它的都是輸入型別,func多達十幾個過載。
class program
func<string
> d1 = returna;
d1 += returnb;
foreach (string s in getallreturnvals(d1))
console.readkey();
}
//返回所有委託方法的執行結果
static ienumerable<t> getallreturnvals<
t>(func<
t> mydelegate)
}
static int returnone()
static int returntwo()
static string returna()
static string returnb()
}
以上泛型委託func同時有輸入引數和返回型別,如果返回型別為void,那就可以使用action了,當然action也有多達十幾個過載。
class program
static void returnstr(string s)
static void returnint(int a)
}
總結:func和action是泛型委託的"語法糖",如果返回型別為void,那就使用action,否則使用func。
Func泛型委託
描述 封裝乙個具有乙個引數並返回tresult引數指定的型別值的方法.語法 public delegate tresult func t arg 引數型別 t 此委託封裝的方法的引數型別.tresult 此委託封裝的方法的返回值型別.引數 arg 委託封裝的方法的引數 返回值 此委託封裝的方法的返回...
Action和Func泛型委託
1.泛型action委託表示引用乙個void返回型別的方法。因為這個委託類存在不同的變體,所以可 以傳遞至多16種不同的引數型別。沒有泛型引數的action類可呼叫沒有引數的方法。action 呼叫帶乙個引數的方法,action呼叫帶兩個引數的方法,action呼叫帶8個引數的方法。2,func委託...
C 內建泛型委託 Func委託
func委託代表有返回型別的委託 檢視func的定義 using system.runtime.compilerservices namespace system 你會發現,func其實就是有多個輸出引數並且有返回值的delegate。func至少0個輸入引數,至多16個輸入引數,根據返回值泛型返回...