委託, 泛型委託,Func和Action

2022-01-18 23:39:28 字數 2445 閱讀 1525

使用委託來做一些事情,大致思路是:

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個輸入引數,根據返回值泛型返回...