2015-01-14 12 views
7

私はC#5.0の文法を見ていますが、 "base"の使用法をよく理解していません。 baseがキーワードである、そしてこれが唯一のケースであることが表示されますC#文法 "base"

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

:リファレンスマニュアルでは、として定義され、「データベースアクセス」の概念があります。しかし、私は

のようなC#の入力に遭遇しました
base.WithAdditionalDiagnostics<TNode>(node, diagnostics); 

この文がどの文法規則を指しているか教えてもらえますか? 「ベース」は文脈的ではない通常のキーワードであるように見えるので、私はこのケースのための特定の文法ルールが必要であると仮定し、baseは単なる識別子ではありません。

+0

私はあなたに特定の文法規則を教えることはできませんが、別のものが由来するクラスを参照するために 'base'が使用されていることが分かります。スーパークラスの状態や動作にアクセスするために、メソッドやコンストラクタをオーバーライドするときに一般的に使用されます。 –

+1

C#5.0のリファレンスマニュアルへのリンクを提供できる場合は役に立ちます – Justin

+1

あなたの質問が分かりません。私は「これが唯一のケースであると思われる」とか「どの文法規則がどの文法規則に言及するか」を解釈する方法はわかりません。 –

答えて

11

は、私はそれが実際には、メンバーのアクセスと同じようになるだろう

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から

:それらは((B)this).I((B)this)[E]書かれたかのように

は結合時に、フォームbase.Ibase[E]ベースアクセス式は、正確に評価されますここで、Bは、構成が発生するクラスまたは構造体の基本クラスです。したがって、base.Iおよびbase[E]は、を基本クラスのインスタンスとして見ることを除いて、this.Iおよびthis[E]に対応します。オプト

追加 型引数リストなし

しかし、私はあなたの既存の式を解析できませんだろうと思います。

これは実際に4th edition of the ECMA-334 specificationで正しく指定されています。私はそれをC#仕様のバグとして提起する(それが第5版では壊れていないことを確認する)。

+0

複数の異なるバージョンの仕様への参照があるようです。 C#5の私の前で私が持っているものは、次のような文法規則を定義しています:* base-access:base。識別子ベース[argument-list] *。 http://i.imgur.com/iuScjTQ.png –

+2

@JeroenVannevel:いいえ、それは私が持っているのと同じ仕様です - 私はそこに最初のオプションにバグがあると言っています。 –

+1

ああ、私はあなたがOPを修正していると思った。それから意味をなさない。 –

関連する問題