我似乎错过了关于这个特定语法的备忘录,因为我今天遇到了它,以前从未见过它:
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";};}