2012-08-16 74 views
2

我有一个程序,定义一个类如何防止命名空间污染?

namespace @default 
{ 
    public class Test 
    { 
    } 
} 

那么我认为全球化志愿服务青年有一个名为Test类中没有命名空间的另一个库。我怎样才能隐藏这个其他库Test类,使我的程序不会看到@default.Test作为其他库Test类?

+0

对不起,这是迂腐,但'默认'是一个保留字。 – 2012-08-17 00:06:38

+1

@KendallFrey但是'@ default'不是。您可以用保留的关键字加上'@'作为标识符。 – 2012-08-17 01:20:57

+0

我知道这仍然是命名空间的糟糕选择,但它是一个代码示例,而不是生产代码。 – 2012-08-17 14:04:39

回答

4

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

外面你default命名空间,你需要做这样的事情在你的using语句:

using ExternalTest = global::Test; 
using Test = default.Test; 

第一行是不是绝对必要的,因为你可以使用global::Test任何地方。

对于那些还没有遇到全球之前:global (C# Reference)

+0

类别别名很好,但如果您是代码的架构师,那么提前计划和尽可能避免它们会更好。我曾经在处理阶级冲突时遇到过很多麻烦。可能不应该创建一个“Page”类...从那个学习。 – CoderMarkus 2012-08-17 00:09:55

+0

@TrueDevelopment我拥有这两个库,但是,我的参考是一个旧的mfc/C++/cli应用程序,我们将其交叉编译为exe和dll。修复它不会是微不足道的。 – 2012-08-17 14:07:11

+0

我完全理解。我有很多我正在使用的代码现在有相同的问题,并且不值得花时间回顾并重构所有代码。对于任何可能偶然发现这篇文章的人来说,这只是对未来的建议。我从错误中学到了很多东西。 – CoderMarkus 2012-08-17 14:58:28

1

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

class Test { } 

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

您经常会看到它在自动生成的代码中使用以避免意外的名称冲突。 Like Resources.Designer.cs

相关问题