2014-02-20 55 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'命名空间。这是它在项目设置中的标签。 –