我认为以下操作是有道理的,但实际上无法执行并会出现错误:命名空间 '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
{
public class bar { ... }
}
namespace foo.bar
{
public class baz : EventArgs { ... }
}
当这个源代码被编译时,IL 甚至不知道有两个命名空间 - foo 和 foo.bar。相反,它只知道类定义。在这种情况下,当它遇到 类bar 时,它知道你有一个名为 foo.bar 的类。
当它遇到 类baz 时,它会解析类的完整名称为 foo.bar.baz。
但是如果是这种情况,baz 应该被正确地声明在 bar 类定义中,而不是像您在这里所做的那样在一个单独的命名空间中。
你必须为命名空间或类名找到另一个名称,这是不可避免的。
找到合适的命名很困难,但可以做到。
namespace foo
{
public class bar
{
public class baz : EventArgs { ... }
}
}
现在您可以按以下方式创建新实例:
var test = new foo.bar.baz();
在同一命名空间中,不可能有相同的类名。如果您的命名空间看起来非常相似,您可能希望将它们放在同一个命名空间中。如果不是这种情况,您可能需要重新考虑在命名空间内对类进行逻辑分类。
可能是
namespace foo_bar
{
public class baz : EventArgs { ... }
}
System.Collections
命名空间和类,如System.Collections.CollectionBase
。如果在该命名空间中需要一个名为“Collections”的类,则其他地方可能出了问题。 - Grant Thomasbar
中使用基于EventArgs
的自定义类型。我应该将自定义类型放在与bar
相同的命名空间中吗? - user247702