Type.FullName以程序集名称为前缀

时间:2014-02-20 21:43:56

标签: vb.net

我对VB.Net有疑问。我通常使用CSharp。

Type.FullName属性似乎包含程序集的名称,但文档说它不应该:

Type.FullName Property

... Type的完全限定名称,包括Type的名称空间,但不包括程序集;

''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 个答案:

答案 0 :(得分:1)

在C#中,您指定完整的命名空间,包括文件中项目的默认命名空间。通常,项目的默认命名空间是文件中指定的命名空间的第一部分,但您也可以指定独立于项目默认命名空间的命名空间。

相反,在VB.NET项目中,您在文件中指定的命名空间放在项目的默认命名空间之后。因此,如果将名称空间Space1放入文件中,则如果项目的默认名称空间为VBLib.Space1,则类型位于VBLib

由于项目的默认命名空间通常与程序集名称相同,因此似乎VB.NET将程序集名称放在命名空间的前面。要对此进行测试,可以更改项目的默认命名空间,使其与程序集名称不同。

这两种方法各有利弊。 C#一方面更灵活,但如果要更改默认命名空间,则必须更改所有文件。在VB.NET中,更改默认命名空间很简单,但是在选择命名空间时灵活性较低,因为默认命名空间始终是第一部分。

相关问题