我认为以下内容是有道理的,但这是不可能的,并且会抛出错误:The namespace 'foo' already contains a definition for 'bar'
。
namespace foo
{
public class bar { ... }
}
namespace foo.bar
{
public class baz : EventArgs { ... }
}
对于这样的案例,命名空间命名的适当方法是什么?
答案 0 :(得分:8)
你必须明白,在CLR的上下文中,没有命名空间这样的东西。 命名空间纯粹是一种语言特性,仅用于简化代码,因此我们不必总是一直读取完全限定的类名。
在您的示例中,
namespace foo
{
public class bar { ... }
}
namespace foo.bar
{
public class baz : EventArgs { ... }
}
编译此源代码时,IL甚至不知道有两个名称空间--foo和foo.bar。相反,它只知道类定义。在这种情况下,当遇到类栏时,它知道你有一个名为foo.bar的类
当遇到类baz时,解析类的全名,如foo.bar.baz
但是如果是这种情况,那么baz应该在bar的类定义中正确声明,而不是像你在这里所做的那样在单独的命名空间中声明。
答案 1 :(得分:4)
您必须为命名空间或类名找到另一个名称。没有办法解决它。
找到合适的命名很困难,但可以做到。
答案 2 :(得分:4)
这实际上取决于你想要达到的目标。如果你真的希望baz位于foo.bar名称空间下,因为它依赖/紧密链接到bar,可以使它成为bar的子类:
namespace foo
{
public class bar
{
public class baz : EventArgs { ... }
}
}
您现在可以创建一个新实例:
var test = new foo.bar.baz();
答案 3 :(得分:1)
在同一名称空间内,不可能具有相同的类名。如果您的命名空间看起来非常相似,那么您可能希望它们位于相同的命名空间中。如果不是这种情况,您可能需要重新考虑名称空间中类的逻辑分类。
答案 4 :(得分:0)
可能是
namespace foo_bar
{
public class baz : EventArgs { ... }
}
否则根本不可能