[英]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.I
和base[E]
形式的基本訪問表達式的計算方式與它們的編寫完全相同((B)this).I
和((B)this)[E]
,其中B
是構造發生的類或結構的基類。 因此,base.I
和base[E]
對應於this.I
和this[E]
,除了this
被視為基類的實例。
如果沒有附加的type-argument-list opt ,我認為你現有的表達式不會解析。
這實際上是在第4版ECMA-334規范中正確指定的; 我將它作為C#規范的一個錯誤提出(並確保它不會因為第5版而被破壞)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.