委托链
- 经过不懈地努力,我终于成为了斗师,并成功掌握了两种斗技——八极崩和焰分噬浪尺。
- 于是,我琢磨着,能不能搞一套连招,直接把对方带走。
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();}}
}