C# => 符号的用法
最近看到一种写法让我感到迷惑,之前一直以为=>是Lambda表达式的写法,现在遇到的明显不是,所以就记录一下。
// 这里的MaxHealth1和MaxHealth2有什么区别?
public class Health
{
// expression-bodied member property
public int MaxHealth1 => x ? y:z;
// field with field initializer
public int MaxHealth2 = x ? y:z;
};
C#里=>的两种用法
1.Lambda中的用法
在C# 3到C# 5版本间,=>只有此种用法。
下面是我平常用到的:
useCard.transform.DOMove(targetObject.position,0.3f).OnComplete(
()=>
{
useCard.transform.SetParent(targetObject,false);
useCard.transform.localPosition = Vector2.zero;
//useCard.transform.localScale= Vector2.one;
useCard.GetComponent<Card>().isMoving = false;
}
);
类似于()=>{}这种,小括号里面是方法的参数,大括号里面是方法体,构成了这个匿名函数。
2.在变量声明的时候的用法
在C# 6的版本里,=>开始用于expression-bodied members,代码如下:
public bool Jump => playerInputActions.Gameplay.Jump.WasPressedThisFrame();
public bool StopJump => playerInputActions.Gameplay.Jump.WasReleasedThisFrame();
public bool Move => AxisX != 0f;
public float AxisX => axes.x;
而这种语法,是一种Syntax Sugar,上面的代码等同于下面的:
public bool Move
{
get
{
return Axisx!=0;
}
}
public bool AxisX
{
get
{
return axes.x;
}
}
所以,上面的MathHealth1和MathHealth2的区别,其实就是C#里Property和Field的区别:
MaxHealth1是一个Property,设置了getter,每次访问该值的时候,都会调用x?y:z表达式
MathHeath2是一个Field,它的表达式只会在其初始化时计算一次。
参考了博主「弹吉他的小刘鸭」的文章,
原文链接:https://blog.csdn.net/alexhu2010q/article/details/118439345