2015-01-14 39 views
7

C# 5.0 dilbilgisine bakıyorum ve "taban" kullanımını tam olarak anlamıyorum. Referans kılavuzunda, olarak tanımlanan "temel erişim" bir kavram vardır: base bir anahtar sözcük olduğunu ve bunun sadece bir yola girdilerC# dilbilgisi "taban"

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

. Ancak, birisi hangi bu açıklama atıfta kural dilbilgisi beni işaret edebilir böyle

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

olarak C# girdileri karşılaşmak? 'Base' normal bir anahtar kelime olarak görünüyor, bağlamsal değil, bu durum için belirli bir dilbilgisi kuralı olması gerektiğini varsayalım ve base sadece bir tanımlayıcı olamaz.

+0

Sizi belirli bir dilbilgisi kuralına yönlendiremiyorum, ancak 'base' öğesinin diğerinin türetildiği bir sınıfa başvurmak için kullanıldığını söyleyebilirim. Genellikle, süper sınıfın durumuna veya davranışına erişmek için bir yöntem veya kurucu geçersiz kılındığında kullanılır. –

+1

C# 5.0 başvuru kılavuzuna – Justin

+1

bir bağlantı sağlayabiliyor olsanız, sorunuzu anladığından emin değilim. Nasıl yorumlanacağından emin değilim, "bu durumun tek örnek olduğu" ya da "bu ifadenin hangi dilbilgisine hükmettiği kuraldır" (herhangi bir ifadenin yorumlanmasında * çoklu * dilbilgisi kurallarının yer alacağı düşünülürse) –

cevap

11

Ben aslında sadece üye erişimi gibi bunu yapacak

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

... olması gerektiğine inanıyoruz: Bir ifadede, başka deyişle

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); 

only

base.WithAdditionalDiagnostics<TNode> 

baz erişim parçasıdır - ve böyle x.WithAdditionalDiagnostics<TNode>(node, diagnostics) gibi diğer aramalar için olacağı gibi gerisi ayrıştırılır. C 5. spec bölüm 7.6.8 itibaren

:

bağlayıcı-zamanda

, baz erişim formu base.I ve base[E] ait ifadeleri, onlar ((B)this).I ve ((B)this)[E] yazılmıştır tam sanki değerlendirilir Burada B, yapının meydana geldiği sınıfın veya yapının temel sınıfıdır. Böylece, base.I ve base[E], this.I ve this[E]'a tekabül eder, this hariç, baz sınıfının bir örneği olarak izlenir. Ek tip argüman listesinden olsa opt olmadan

, ben mevcut ifadesi ayrıştırmak olmaz düşünüyorum.

Bu, aslında 4th edition of the ECMA-334 specification; C# belirtimiyle bir hata olarak geliştireceğim (ve 5. baskı için kırılmadığından emin olun).

+0

Spesifikasyonların farklı versiyonlarına referanslar var gibi görünüyor. C# 5 in önümde sahip olduğum dilbilgisi kuralları şöyle tanımlar: * base-access: base. tanımlayıcı tabanı [argüman-list] *. http://i.imgur.com/iuScjTQ.png –

+2

@JeroenVannevel: Hayır, bende aynı özellik var - Orada ilk seçenekte bir hata var diyorum. –

+1

Ah gotcha, OP'yi düzelttiğini sanıyordum. O zaman mantıklı. –