C# 如何防止污染?

C# 如何防止污染?,c#,C#,我有一个定义类的程序 namespace @default { public class Test { } } 然后,我引用了另一个没有名称空间的库,其中包含一个名为Test的类。我如何隐藏这个其他库Test类,以便我的程序不会将@default.Test视为其他库Test类?默认情况下,在您的default命名空间中,default.Test类是您说Test时将使用的类 在默认名称空间之外,您需要在using语句中执行以下操作: using ExternalTest

我有一个定义类的程序

namespace @default
{
    public class Test
    {
    }
}

然后,我引用了另一个没有名称空间的库,其中包含一个名为
Test
的类。我如何隐藏这个其他库
Test
类,以便我的程序不会将
@default.Test
视为其他库
Test
类?

默认情况下,在您的
default
命名空间中,
default.Test
类是您说
Test
时将使用的类

默认
名称空间之外,您需要在using语句中执行以下操作:

using ExternalTest = global::Test;
using Test = default.Test;
第一行不是必须的,因为您可以在任何地方使用
global::Test


对于那些以前没有遇到过全局的:。

在标识符名称前面加上
全局::
,以指示它应该从全局(未命名)命名空间开始找到。例如:

class Test { }

namespace Default {
    public class Test {
        global::Test theOtherOne;
    }
}

您经常会看到在自动生成的代码中使用它来避免意外的名称冲突。像Resources.Designer.cs一样,很抱歉太迂腐了,但是
default
是一个保留字。@KendallFrey但是
@default
不是。您可以使用
@
作为保留关键字的前缀,以将它们用作标识符。我知道名称空间的选择仍然很糟糕,但这是一个代码示例,而不是生产代码。类别名很好,但如果您是代码的架构师,最好提前计划并尽可能避免它们。我在处理阶级冲突时经常头痛。可能不应该创建一个
页面
类。。。从中学习。@TrueDevelopment我确实拥有这两个库,但我引用的是一个旧的mfc/c++/cli应用程序,我们交叉编译到它和exe和dll。修好它不是小事,我完全理解。我现在正在处理的很多代码都有相同的问题,不值得花时间回去全部重构。对于任何可能偶然发现这篇文章的人来说,这只是对未来的一个建议。我从我的错误中学到了很多。