我似乎错过了关于这个特定语法的备忘录,因为我今天遇到过它并且之前没有看过它:
private readonly PageContext _pageContext;
internal PageContext PageContext => _pageContext;
我可以猜测这意味着返回私有值,但是这种类型的语法被调用了,为什么会使用它而不是像这样的getter?
internal PageContext PageContext{get{return _pageContext}};
答案 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)
答案 2 :(得分:0)
它被称为Expression Bodied Member。您可以使用它代替getter来节省输入并编写&#34; cleaner&#34;代码。
答案 3 :(得分:-1)
这称为表达式主体语法,它已在C#6.0中引入。 如果您只想提供吸气剂,那么您可以使用它。 它是这样的 public string Abc {get {return“this is string”;};}