C# 与类名同名的命名空间

C# 与类名同名的命名空间,c#,C#,我认为这样做是有意义的,但这是不可能的,并且会引发错误:名称空间“foo”已经包含“bar”的定义。 namespace foo { public class bar { ... } } namespace foo.bar { public class baz : EventArgs { ... } } 对于这种情况,名称空间命名的适当方式是什么?您必须为名称空间或类名找到另一个名称。这是没有办法的 找到合适的命名很困难,但可以做到。在同一名称空间中,不可能有相同的类名。如果

我认为这样做是有意义的,但这是不可能的,并且会引发错误:
名称空间“foo”已经包含“bar”的定义。

namespace foo
{
    public class bar { ... }
}

namespace foo.bar
{
    public class baz : EventArgs { ... }
}

对于这种情况,名称空间命名的适当方式是什么?

您必须为名称空间或类名找到另一个名称。这是没有办法的


找到合适的命名很困难,但可以做到。

在同一名称空间中,不可能有相同的类名。如果名称空间看起来非常相似,那么您可能希望它们位于同一名称空间中。如果不是这样,您可能需要重新考虑名称空间中类的逻辑分类。

可能是这样

namespace foo_bar
{
    public class baz : EventArgs { ... }
}

否则根本不可能

这实际上取决于你想要实现什么。如果您确实希望baz位于foo.bar名称空间下,因为它是依赖的/紧密链接的,那么您可以将其作为bar的子类:

namespace foo
{
    public class bar 
    {
        public class baz : EventArgs { ... }
    }
}
您现在可以创建一个新实例,如下所示:

var test = new foo.bar.baz();

您必须理解,在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的类定义中正确声明,而不是像您在这里所做的那样在单独的名称空间中声明

如果没有一个实际的例子,建议将不得不做出有根据的猜测,覆盖所有潜在的基础,或者不能成为一个很好的答案;根据经验,名称空间是一个类别或泛化,而一个类是一个特定的实用程序命名应该反映这一点。例如
System.Collections
命名空间和类,例如
System.Collections.CollectionBase
。如果在这个名称空间中需要一个名为
Collections
的类,那么就有其他错误。这或多或少是一个实际的例子。我想在类
栏中使用基于
EventArgs
的自定义类型。我是否应该将自定义类型放在与
bar
相同的名称空间中?同意,“.”在名称空间中肯定会引起进一步的混淆。这看起来就像我想要实现的。一旦我被允许,我会接受的。