什么是这种类型的属性语法:int x => _X;

时间:2017-08-25 14:54:21

标签: c#

我似乎错过了关于这个特定语法的备忘录,因为我今天遇到过它并且之前没有看过它:

private readonly PageContext _pageContext;
internal PageContext PageContext => _pageContext;

我可以猜测这意味着返回私有值,但是这种类型的语法被调用了,为什么会使用它而不是像这样的getter?

internal PageContext PageContext{get{return _pageContext}};

4 个答案:

答案 0 :(得分:1)

这称为表达式主体语法,它已在C#6中引入。您可以找到更多信息here。正如在那里所说:

  

属性和索引器可以包含getter和setter。表达   body可用于编写仅限getter的属性和索引器   吸气剂的主体由表达体给出:

关于你的第二个问题:

为什么会使用它而不是像这样的吸气剂?

我会使用它,以便我的代码更紧凑。我发现它比使用花括号,返回语句等更加简洁。

顺便说一下,如果你只想声明一个只读属性,你也可以使用以下语法,避免声明支持字段,_pageContext

internal PageContext PageContext { get; }

<强>更新

在OP提供的示例中,如果我们使用此

internal PageContext PageContext { get { return _pageContext } };

或以下:

internal PageContext PageContext => _pageContext;

我们总会得到相同的结果。后者是第一个的语法糖,它应该是优先的,因为使代码更紧凑和清晰。

在这两种情况下,_pageContext将在相应类的构造函数中初始化,因为这是一个只读字段,并且它的值未在字段定义中声明:

private readonly PageContext _pageContext;

另一方面,以下表达式并不相同:

DateTime TimeWhenCalled => DateTime.Now;

DateTime TimeWhenInitialized { get; } = DateTime.Now; 

第一个会在每次被称为DateTime.Now的值时返回。虽然第二个将始终返回相同的值,但是当创建包含此属性的类的对象并且运行时命中此行时,DateTime.Now的值。

答案 1 :(得分:0)

这是一个表情身体财产。

此语法不仅限于属性,您可以找到更多信息here

它只不过是一些语法糖。

答案 2 :(得分:0)

它被称为Expression Bodied Member。您可以使用它代替getter来节省输入并编写&#34; cleaner&#34;代码。

答案 3 :(得分:-1)

这称为表达式主体语法,它已在C#6.0中引入。 如果您只想提供吸气剂,那么您可以使用它。 它是这样的 public string Abc {get {return“this is string”;};}