【问题标题】:Type.FullName prefixed by Assembly nameType.FullName 以程序集名称为前缀
【发布时间】:2014-02-20 21:43:55
【问题描述】:

我有一个关于 VB.Net 的问题。我通常使用 CSharp。

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

Type.FullName 属性

...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 完整类型名称之间获得一些一致的行为。

【问题讨论】:

    标签: vb.net


    【解决方案1】:

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

    相比之下,在 VB.NET 项目中,您在文件中指定的命名空间放在项目的默认命名空间之后。所以如果你把命名空间Space1放在你的文件中,如果你的项目的默认命名空间是VBLib,那么类型就位于VBLib.Space1

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

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

    【讨论】:

    • 很好的回应!我知道我只是错过了一些东西。
    • 为了迂腐,VB 没有“默认”命名空间,它有一个“根”命名空间。这就是它在项目设置中的标记方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 2012-06-18
    相关资源
    最近更新 更多