【问题标题】:Same class name in same namespace相同命名空间中的相同类名
【发布时间】:2012-07-31 15:42:03
【问题描述】:

我正在处理一个网络项目,我被要求将一些文件从一个项目移动到另一个项目,但是这两个项目都在同一个解决方案中。所以我将 File1 从项目 A 迁移到项目 B。但是,我在 File1 中有一个“Foo”命名空间,其中有一个名为“Bar”的类。但是,我在项目 B 中也有一个“Foo”命名空间,而在另一个“Foo”命名空间中,我还有另一个“Bar”类。知道重命名命名空间或类不是一种选择,我该如何解决这个问题?

谢谢,

拉霍斯阿尔帕德。

【问题讨论】:

  • 显然你不能,除非你想合并 Bar 类,把它们都变成部分类。
  • 如果您不能更改类或命名空间,这不算什么迁移。同一程序集中的两个类不能具有相同的类名和命名空间。如果类在不同的程序集中,有一种方法可以做到这一点,但这并不适用于此。
  • 不要将类命名为与其命名空间相同的名称。 blogs.msdn.com/b/ericlippert/archive/2010/03/09/…
  • @Jodrell,我有一个无法更改的 DLL,链接到 B 项目,生成的类在 B 项目中定义。因此,重命名它们中的任何一个都不是一种选择。我已经找到了问题的解决方案,但我还没有将其作为答案分享,因为我必须进行大量测试。当我完成测试时,如果没有人回答问题,我将自己回答。
  • @LajosArpad,您的评论描述的情况与您原始问题中的情况不同。

标签: asp.net vb.net class namespaces


【解决方案1】:

您有两个选择:

  1. 重命名类或命名空间
  2. 合并两个 Bar 类(您可以将它们都设为部分,或者通过将代码从一个移动到另一个来合并它们)

【讨论】:

  • 不,就我而言,重命名类和命名空间不是一种选择,正如我在问题中所描述的那样。这两个 Bar 类在概念上非常不同,它们不属于一起,只有当且仅当这两个类不是很不同时,您的第二个选项才可行。
  • @LajosArpad 如果更改命名空间不是一个选项,为什么这是你的答案?
  • 我没有改命名空间,我改了别的东西,就是项目的默认命名空间。
【解决方案2】:

你不能这样做。您需要更改源或目标的名称空间或类名。

【讨论】:

  • 我已经设法做到了,正如我的回答中所描述的那样。我所有的测试都成功了。
【解决方案3】:

我已经设法通过为 B 项目提供默认命名空间来解决我的问题,因此在 B 项目中生成的给定命名空间最终位于项目的默认命名空间内,而来自 DLL 的命名空间仍然在项目的默认命名空间。

【讨论】:

  • 所以,你改变了命名空间,你说这是你做不到的。
  • 我已经更改了项目的默认命名空间,所以命名空间的位置不同,但我没有更改命名空间,是一样的,但它位于图中的其他位置命名空间。
  • 如果这是一个 VB.Net 项目,它没有“默认”命名空间。它有一个“根”命名空间,在编译时,它成为类命名空间的一部分,因此实际上,您确实更改了命名空间。
  • 是的,抱歉,它是一个根命名空间。但是我没有改变我的命名空间,当根被定义时,它变成了根内部的一个命名空间。但是,我没有改变我的命名空间,我添加了一个根,因此命名空间的位置已经改变了。
猜你喜欢
  • 1970-01-01
  • 2015-07-18
  • 2011-12-01
  • 1970-01-01
  • 2022-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-25
相关资源
最近更新 更多