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

  • 本文关键字:int 类型 种类 属性语法 c#
  • 更新时间 :
  • 英文 :


我似乎错过了关于这个特定语法的备忘录,因为我今天遇到了它,以前从未见过它:

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

我可以猜到它的意思是返回私有值,但是这种类型的语法叫什么,为什么要使用它而不是像这样的 getter?

internal PageContext PageContext{get{return _pageContext}};

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

属性和索引器可以具有 getter 和 setter。表达 主体可用于编写仅 getter 属性和索引器,其中 getter 的主体由表达式 body 给出:

关于你的第二个问题:

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

我会使用它,以便我的代码更紧凑。我发现它比必须使用大括号、return 语句等更简洁。

顺便说一下,如果你只想声明一个只读属性,你也可以使用以下语法,避免声明支持字段,_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的值。

它被称为表达式主体成员。您可以使用它代替 getter 来保存键入并编写"更干净"的代码。

它是一个表达式 身体属性。

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

它只不过是一些句法糖。

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

最新更新