簡體   English   中英

C#語法“基地”

[英]C# grammar “base”

我正在研究C#5.0的語法,並不太了解“base”的用法。 在參考手冊中,有一個“基本訪問”的概念定義為:

base-access:
    base   .   identifier
    base   [   expression-list   ]

其中base是關鍵字,並且看起來這是唯一的情況。 但是,我遇到了C#等輸入

base.WithAdditionalDiagnostics<TNode>(node, diagnostics);

有人能指出我這個陳述所指的語法規則嗎? 由於'base'似乎是一個普通的關鍵字,而不是上下文,我假設對於這種情況應該有一個特定的語法規則,而base不能只是一個標識符。

我相信它應該

base-access:
    base   .   identifier type-argument-list_opt
    base   [   expression-list   ]

...這會使它像成員訪問:

member-access:
    primary-expression   .   identifier   type-argument-list_opt
    predefined-type   .   identifier   type-argument-list_opt
    qualified-alias-member   .   identifier   type-argument-list_opt

換句話說,在表達式中

base.WithAdditionalDiagnostics<TNode>(node, diagnostics);

只要

base.WithAdditionalDiagnostics<TNode>

基本訪問部分 - 其余部分被解析為其他調用,如x.WithAdditionalDiagnostics<TNode>(node, diagnostics)

從C#5規范的7.6.8節:

在綁定時, base.Ibase[E]形式的基本訪問表達式的計算方式與它們的編寫完全相同((B)this).I((B)this)[E] ,其中B是構造發生的類或結構的基類。 因此, base.Ibase[E]對應於this.Ithis[E] ,除了this被視為基類的實例。

如果沒有附加的type-argument-list opt ,我認為你現有的表達式不會解析。

這實際上是在第4版ECMA-334規范中正確指定的; 我將它作為C#規范的一個錯誤提出(並確保它不會因為第5版而被破壞)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM