有时我在C#中创建了一个命名空间(我不知道VB.NET中的问题是否相同)并且当我从一个不同的DLL中包含它时,它变得疯狂并且与包含'System'的所有内容发生冲突.这会导致疯狂的错误,例如:
命名空间"RR.System"中不存在类型或命名空间名称"ServiceModel"
命名空间"RR.System"中不存在类型或命名空间名称"Runtime"
命名空间"RR.System"中不存在类型或命名空间名称"SerializableAttribute"
如果你不知道我在说什么,那么对你有好处:)我相信很多人已经看到了这个问题.
我不完全确定为什么会这样做.它甚至会出现在文件中,例如生成的Web服务代码,它不包含任何引用RR.System.
这一切都只是因为我RR.System将DLL 包含在不同的项目中.
我怎样才能避免这种情况发生?还是解决它?
我仍然不明白为什么子命名空间与根命名空间冲突?命名空间下的所有类型都可以是完全限定的,并且完全限定的名称引用不同的类型。例如
System.Abc.Xyz.Type
Run Code Online (Sandbox Code Playgroud)
没有任何关系
Abc.Xyz.System.Type
Run Code Online (Sandbox Code Playgroud)
第System一种情况中的 指的是完全不同的概念(指南中的公司名称),而System第二种情况中的 可以指产品或子系统名称。
如果根命名空间会导致这种干扰,那么这肯定是一个大问题,因为我可能会选择调用我的新雨林监控产品Amazon并将所有类型放在MyCompany.Amazon. 然后稍后我可能会选择使用 S3 存储来存储我的数据,突然 Amazon 命名空间会引起冲突。
我们刚刚遇到了同样的问题,因为我们的项目分为 3 个主要子系统 - 数据库、用户和系统。这些看起来像是我们的 MyCompany 根命名空间下明显的子命名空间。
请记住,这与使用语句无关,正如 Simon 所说的“它甚至会发生在文件中,例如为不包含任何对 RR.System 引用的 Web 服务生成的代码”
更新:以下堆栈溢出问题是相同的。然而,它指向的 MSDN 文章讨论了一个名为 System 的类名,它隐藏了一个命名空间(足够公平),并且还使用 System 作为顶级命名空间(足够公平)。然而,它没有讨论为什么子命名空间与根命名空间冲突。
Stack Overflow 问:global:: 在 C# 中是一种不好的代码味道吗?
MSDN 文章:如何:使用命名空间别名限定符
| 归档时间: |
|
| 查看次数: |
1863 次 |
| 最近记录: |