2014-02-20 52 views
1

我有一個關於VB.Net的問題。我通常使用CSharp。Type.FullName前綴爲程序集名稱

的Type.FullName屬性似乎包括組件的名字,但文件說,它不應該:

Type.FullName物業

...類型的全名,包括類型的名稱空間而不是程序集;

''Class1.vb -- compiled into assembly VBLib 
Namespace Space1 
    Public Class Class1 

    End Class 
End Namespace 

''Class2.cs 
namespace Space2 
{ 
    class Class2 
    { 
    } 
} 

''Program.cs 

using Space2; 
using VBLib.Space1; // Need to prefix the namespace with the assembly name? 

static void Main(string[] args) 
{ 
    Type t1 = typeof(Class1); 
    Type t2 = typeof(Class2); 

    Console.WriteLine("t1 = " + t1.FullName); 
    Console.WriteLine("t2 = " + t2.FullName); 
} 

輸出:

T1 = VBLib.Space1.Class1

T2 = Space2.Class2

我使用反射並試圖獲得CSHARP之間的一些行爲一致和VB全名類型。

回答

1

在C#中,您可以在文件中指定包含項目默認名稱空間的完整名稱空間。通常,項目的默認名稱空間是文件中指定的名稱空間的第一部分,但您也可以指定獨立於項目的默認名稱空間的名稱空間。

相比之下,在VB.NET項目中,您在文件中指定的命名空間放置在項目的默認命名空間之後。因此,如果將名稱空間Space1置於文件中,則如果項目的默認名稱空間爲VBLib,則類型位於VBLib.Space1中。

由於項目的默認名稱空間通常與程序集名稱相同,因此VB.NET似乎將程序集名稱放在名稱空間的前面。爲了測試這個,你可以改變你的項目的默認命名空間,使它不同於你的程序集名稱。

這兩種方法各有利弊。 C#一方面更加靈活,但如果要更改默認名稱空間,則必須更改所有文件。在VB.NET中,更改默認命名空間很容易,但是在選擇命名空間時缺乏靈活性,因爲默認命名空間始終是第一部分。

+0

優秀的迴應!我知道我只是錯過了一些東西。 – yashoe

+0

只是爲了迂腐,VB沒有'默認'命名空間,它有一個'root'命名空間。這是它在項目設置中的標籤。 –