【C#】知识补充
弃元
本质上是个占位符,用_
表示,它只能被赋值,不能被读取,也不占内存空间,可以理解为:为满足代码的格式要求,用__代替变量占用位置。
_ = 1; //代码上赋值了,其实没有赋值
Console.Write(_) //提示上下文不存在名称“_”
通过以上代码可知,_
是独立的,它不是一个真的变量,因为内存中没有它,那么它在同一行代码中可以出现多次:
var (year, _, _) = Test.GetCustomDate();
class Test
{
static public (int, int, int) GetCustomDate()
{
//...
return (2022, 1, 1);
}
}
上面的函数返回多个值,而如果我们只需要其中一个值,比如年份时,则用弃元的方法,假装有变量接收函数的返回值的后两位。
弃元的应用场景很多,也非常灵活,只要理解了它是一个占位符,知道当一个值我们不需要读取,只需要被接收时就可以使用它,那么就掌握了它。
委托
委托是个类,它的应用本质是将方法作为参数,应用场景之一是在A类中调用一个方法,而方法的具体逻辑在B类中。
基础的委托如下
delegate bool MyMethod(int val);
class A
{
//只要返回值、参数数量和类型相同,就可以委托,以下就是同一个委托的2个不同实现
MyMethod std1 = new MyMethod(ImpMethod1);
//MyMethod std2 = new MyMethod(ImpMethod2);
private bool ImpMethod1(int val)
{
return val>0;
}
private bool ImpMethod2(int val)
{
return val<0;
}
//委托作为参数传入其他方法中
private bool OtherMethod(MyMethod bstd)
{
return bstd.Invoke(1);
}
//调用其他方法时,要确定委托中的参数
OtherMethod(std1)
OtherMethod(new MyMethod(ImpMethod2))
}
委托推断
MyMethod std1 = ImpMethod1; //可省略 new
简化调用
bstd(1); //省略了Invoke
匿名方法
MyMethod std1 = delegate(int val){ return val > 0 };
Lambda
MyMethod std1 = val=> val > 0 ;
Action、Func
可以避免定义委托,Action是无返回值的委托,Func是有返回值的委托,它们都有0到16个参数可选择
private bool OtherMethod1(Action<int val> act)
{
//......
}
private bool OtherMethod2(Func<int val,out result> func)
{
//......
}
高阶函数
将委托作为返回值
//定义一个委托
delegate int Calculate(int a,int b);
//一个返回值为上面委托的函数
Calculate ExCalculate(string c)
{
switch(c)
{
case "+" :
return (a,b) => a + b;
case "-" :
return (a,b) => a - b;
//......
}
}
//创建变量接收返回的委托
Calculate cal1 = ExCalculate("+");
//使用委托得到计算结果
int result = cal1(1,2);
Target
可以通过委托的Target获得该委托的实例对象,多播委托时获得的是最后注册的对象
多播委托
delegate int Calculate(int a,int b);
Calculate += A;
Calculate += B;
Calculate += C;
private int A(int a ,int b)
private int B(int a ,int b)
private int C(int a ,int b)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律