2010-03-14 11 views
8

Sınıf adı: MyAssembly.MyClass+MyOtherClassSınıf adına "+" mı sahip olmak istiyorsunuz?

sorun yerine Traditionnal nokta, onun işlevinin, + ayırıcı olarak açık bir şekilde ve diğerleri ayırıcıları durumun olup olmadığını görmek için resmi belgeleri bulmak için.

+0

Bunu neden bilmeniz gerekiyor? Bu bilgi ile neyi başarmaya çalışıyorsunuz? –

cevap

13

yılında

class A+B 

olarak görülebilir olacaktır. Örneğin Yani:

namespace Foo 
{ 
    class Outer 
    { 
     class Nested {} 
    } 
} 

derlenmiş kod Foo.Outer+Nested tam adıyla bir tür oluşturur. (Yani typeof(Outer.Nested).FullName örneğin dönecekti budur.)

Bu davranışı belirtilen olup olmadığını veya Microsoft C# derleyicisi kullanmayı tercih sadece ne bana net değil; Bu, normal C# içinde bir + ile bir sınıf açık bir şekilde ilan edemediğiniz bir "tarifsiz" adıdır, bu yüzden derleyici başka bir şeyle çatışmayacağını bilir. C# 3 özelliğinin Bölüm 10.3.8'i, derlenmiş adı görebildiğim kadar dikte etmemektedir.

DÜZENLEME: Type.AssemblyQualifiedName "+" iç içe bir tip adından önce kullanıldığını belirtir Ben sadece gördüğüm ... ama aslında gerekli ya da sadece geleneksel olup olmadığı hala net değil.

+2

Bu uygulama detayının kendini göstermesinin bir başka yolu da iç içe geçmiş genel türlerde. Iç içe geçmiş sınıf İç ile dış sınıf varsa, aslında metadata aldığınız iki tür, Dış <'1> ve Dış + İç <'2> olduğunu göreceksiniz. İç içe türler CLR perspektifinden gerçekten sadece dil tarafından söylenen uygun bir fibidir. Yuvalama, sadece iç tipin dış tipteki özel üyelere erişme kabiliyetinde "gerçek için" ortaya çıkar. (Ad alanları benzer şekilde bir kurgudur.) –

+0

Yuvalanmış sınıfın adı Microsoft'un C# derleyicisi tarafından basitçe seçildiyse, diğer derleyicilerle birlikte çalışabilirlik nasıl mümkün olabilir? Örneğin iç içe geçmiş sınıfları kullanamayacağı anlamına mı geliyor? Mono derleyicisini kullanarak? –

+0

divo: Mono'nun C# derleyicisinin Microsoft'unkiyle aynı düzeni izlediğini varsayardım. Aynı şekilde, C# spec'te belirtilmemiş bir şeyin kaldığı her yerde. –

10

Derleyici, iç içe geçmiş bir sınıfı temsil etmek için meta verilerde budur.

yani

class A { class B {} } 

yuvalanmış bir tip temsil edilir sadece yolu meta veri

+1

Teşekkürler. Bu şekilde bulabileceğimiz tek işaret bu mu? – Graveen

+0

Sadece ILDASM'deki .NET (1.1) kitaplığına bakıyordum ve iç içe geçmiş türleri ayırıcı olarak '/' gösteriyordu. –

+0

Yani ILDASM yalan söylüyor. –

İlgili konular