2013-02-14 23 views
13

C# adındaki tam ad ayırıcı, dönem karakteridir (.). Örneğin. System.Console.Write.C# ad alanı ayırıcısı (.) Bir yerde tanımlanmış mı?

bu yerde Path.PathSeperator gibi tanımlanmış mı, yoksa sert hem de .NET yansıma sınıflarında kodlanmıştır?

(örn Type.FullName Temel olarak değişmeyeceği varsayımıyla Type.Namespace + "." + Type.Name olarak

cevap

15

uygulanır: Dil şartname Ama aslında, Type.FullName BCL tanımları değil, C# tanımlarını kullanır - ve ilginç onlar katılmıyorum?.. Örneğin:

C# için
namespace X { 
    public class Y { 
     public class Z {} 
    } 
} 

, ZX.Y.Z olduğu; BCL için bu X.Y+Z olan jenerik temsili çok değişikliği - BCL ile geri t kullanılmıştır. köşeli parantez yerine icks ve sayılar. o (yansıma yayar sırasında hariç) bunu yapmak için gerekli değildir: Ben BCL (ayrı bir özelliğe sahiptir) türleri Cli biçimini kullanır, ancak bunu düşünmek eğer inanmak .

AFAIK, bu ayırıcılar Path.PathSeparator gibi herhangi bir şeyden etkilenmez - ancak, dediğiniz gibi, Type vb. Sınıflarına kodlanmıştır.

+0

ben 'X.Y + Z' notasyonu anonim türleri için ve yığın izleri görülebilir düşünüyorum ...? –

+0

@ThorstenDittmar açısından C#, anonim tipler * asla adınız yok *. Derleyici C# 'de yasadışı olan isimler üretir - <> _ 4' gibi şeyler (vs). BCL isimlerine bakarak, belki de .GetType() 'yoluyla - anonim tipler için böyle bir gösterim görürsünüz, ancak bu, X.Y + Z 'gibi normal bir türe bakmaktan farklı değildir. Yığın izleri açısından: evet, türlerin içsel gösterimini kullanacaktır: çünkü bu noktada derleyici çalışmıyor çünkü C# terminolojisi geçerli değil. Aynı şekilde, 'int' genellikle' System.Int32' vb. –

5

bir tür ve ad arasında sınırlayıcı Type.Delimiter alanında BCL tanımlanır. Yansıma API'larında kullanılan bu değeri göreceksiniz ve bir türü ve ad alanını birleştirmek için güvenilir şekilde kullanılabilir.

1

Referans kaynaklarda yer alan it's used nolu bilgiye göre, @ Paul'un Type.Delimiter ana sorunuzun yanıtıdır, ancak yanıtınız örn. @ Içinde Marc'ın cevabını belirtildiği gibi, '.' yanı sıra '+', evet hard coded olduğunu.