在阅读项目时,我发现了一些奇怪的C#代码:
public class F : IElement
{
public int CurrentHp { get; } = 10;
public bool IsDead => CurrentHp <= 0;
}
Run Code Online (Sandbox Code Playgroud)
通常我会写一些类似的东西:
public class F : IElement
{
public const int CurrentHp = 10;
public bool IsDead
{
get { return CurrentHp <= 0; }
}
}
Run Code Online (Sandbox Code Playgroud)
我的Visual Studio 2013也无法识别第一个示例.
这个语法是什么,我该怎么做才能使这个项目可构建?
Ste*_*eve 34
=>
是C#6中的新运算符,表示用于该getter 的Expression Bodied函数.
就编译器而言,您的两个示例是同义词,只返回指定的值.这=>
是一种语法糖,使开发更容易,并且需要更少的代码行来实现相同的结果.
但是,除非使用最新的编译器版本更新到VS2015,否则将无法编译.
编辑:
正如Philip Kendall和Carl Leth在评论中所说的那样,每个中的第一行并不完全是同义词,因为它public const int CurrentHp = 10;
是一个字段并且public int CurrentHp { get; } = 10;
是属性.虽然在较高的水平的结果是相同的(分配的值10
,以CurrentHp
与属性仅是在类的构造可凝固)时,它们的不同点在于:
随着
const int CurrentHp = 10
,CurrentHp
将永远是10
,占用4个字节总数,并且可以静态地进行访问.int CurrentHp { get; } = 10
默认为10
,但可以在构造函数中更改F
,因此每个实例可以不同,并且不能静态访问.
Kir*_*ill 23
它是C#6的特性:C#6中的 新语言特性.
首先
public int CurrentHp { get; } = 10;
Run Code Online (Sandbox Code Playgroud)
第二
public bool IsDead => CurrentHp <= 0;
Run Code Online (Sandbox Code Playgroud)
正如其他人所说,它是新的C#6功能.检查完整列表1
但更准确地说,这将在C#6之前转化为此:
public class F : IElement
{
public int CurrentHp { get; private set };
public bool IsDead { get { return CurrentHp <= 0; } }
public F() { CurrentHp = 10; }
}
Run Code Online (Sandbox Code Playgroud)