委托
委托: 关键字 Delegate
用法中无返回值委托是Action<>
有返回值是Func
委托从根本上来说就是一个类,继承值System MulticastDelegate 该类是一个密封类,是不可以被继承
使用案例
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DelegateDemo1
{
/// <summary>
/// 枚举类型
/// </summary>
public enum people
{
Chinese = 1,
USA = 2,
}
class Program
{
static void Main(string[] args)
{
People();
}
public static void People()
{
/*第一种方法通过switch来条件判断*/
Program.Sayspeak2("张三", people.Chinese);
Program.Sayspeak2("MISSLi", people.USA);
/*第二方法在通过不同的选择来调用不通的方法*/
Program.SayChinese("张三");
Program.SayUSA("MISSLi");
/*
在每一个方法上面增加一个方法量说明
方法一中可以直接在判断中增加说明
方法二中需要在每一个方法中增加需求条件
*/
/*第三种方法 */
//至上往下--逻辑解耦,方便维护升级
//至下而上--代码重用,去掉重复代码
Program.Sayhellow("MISSLi", SayChinese);
Program.Sayhellow("MISSLi", SayUSA);
}
public static void Sayhellow(string name, Action<string> action)
{
//需求中增加
//Console.WriteLine("AABBABC 大闹天宫无底渊");
action.Invoke(name);
}
/// <summary>
/// 方案二
/// </summary>
/// <param name="name"></param>
/// <param name="people"></param>
public static void Sayspeak2(string name, people people)
{
//需求中增加
//Console.WriteLine("AABBABC 大闹天宫无底渊");
switch (people)
{
case people.Chinese:
Console.WriteLine($"{name}说 你好");
break;
case people.USA:
Console.WriteLine($"{name}Say hellow");
break;
default:
throw new Exception("这是一个错误的方法");
}
}
private static void SayChinese(string name)
{
//需求中增加
//Console.WriteLine("AABBABC 大闹天宫无底渊");
Console.WriteLine($"{name}说 你好");
}
private static void SayUSA(string name)
{
//需求中增加
//Console.WriteLine("AABBABC 大闹天宫无底渊");
Console.WriteLine($"{name}Say hellow");
}
public void CWNoprop()
{
Console.WriteLine("这是一个无返回值的方法");
}
public int CWreturnint()
{
Console.WriteLine("这是一个带返回值的方法返回值为2");
return 2;
}
}
}

浙公网安备 33010602011771号