委托链
经过不懈地努力,我终于成为了斗师,并成功掌握了两种斗技——八极崩和焰分噬浪尺。 于是,我琢磨着,能不能搞一套连招,直接把对方带走。
using System ;
using System. Collections. Generic ;
using System. Linq ;
using System. Text ;
using System. Threading ;
using System. Threading. Tasks ;
namespace FrameworkDemo
{
class Program
{
delegate void 攻击委托类型( string a) ;
static void 八极崩( string a) {
Console. WriteLine ( "八极崩" ) ;
}
static void 焰分噬浪尺( string a)
{
Console. WriteLine ( "焰分噬浪尺" ) ;
}
static void Main ( string [ ] args)
{
攻击委托类型 一套连招 = new 攻击委托类型( 八极崩) ;
一套连招 += 焰分噬浪尺;
一套连招( "吃我一记连招" ) ;
Console. ReadLine ( ) ;
}
}
}
委托链返回值(GetInvocationList)
这连招确实是打出来了,但是我怎么知道我打出了多少伤害呢?所以我要想办法接受这套输出的反馈。
using System ;
using System. Collections. Generic ;
using System. Linq ;
using System. Text ;
using System. Threading ;
using System. Threading. Tasks ;
namespace FrameworkDemo
{
class Program
{
delegate int 攻击委托类型( string a) ;
static int 八极崩( string a) {
Console. WriteLine ( "八极崩" ) ;
return 330 ;
}
static int 焰分噬浪尺( string a)
{
Console. WriteLine ( "焰分噬浪尺" ) ;
return 660 ;
}
static void Main ( string [ ] args)
{
攻击委托类型 一套连招 = 八极崩;
一套连招 += 焰分噬浪尺;
Delegate[ ] delList = 一套连招. GetInvocationList ( ) ;
for ( int i = 0 ; i < delList. Length; i++ ) {
攻击委托类型 del = ( 攻击委托类型) delList[ i] ;
int result = del ( "吃我一套连招" ) ;
Console. WriteLine ( $"攻击伤害: { result } " ) ;
}
Console. ReadLine ( ) ;
}
}
}
泛型委托
这时候,问题就来了,我每创建一个委托,岂不是都要先定义一个委托类型,然后再创建一个委托实例,假设这个委托类型只用一次,那我岂不是要在我的类里面定义一大堆的委托? 于是乎,就出现了一系列的泛型委托。 Action是不带有返回值的泛型,而Func具有返回值。
using System ;
namespace FrameworkDemo
{
class Program
{
static void 八极崩( ) {
Console. WriteLine ( "八极崩" ) ;
}
static void 焰分噬浪尺( string a)
{
Console. WriteLine ( "焰分噬浪尺" ) ;
}
static string 佛怒火莲( string a) {
Console. WriteLine ( "佛怒火莲" ) ;
return "成功击杀敌军!" ;
}
static void Main ( string [ ] args)
{
Action 攻击委托1 = 八极崩;
攻击委托1 ( ) ;
Action< string > 攻击委托2 = 焰分噬浪尺;
攻击委托2 ( "吃我一击!" ) ;
Func< string , string > 攻击委托3 = 佛怒火莲;
string result = 攻击委托3 ( "绝杀" ) ;
Console. ReadLine ( ) ;
}
}
}