【发布时间】:2013-12-11 12:59:58
【问题描述】:
我有一个包含多个命名空间的结构,并且在每个命名空间中我都有一个静态类,它有点像该命名空间网络中的一个小型蜘蛛。像部门负责人。
让我们以Foo.Bar.Baz 和Foo.Bar.Quux 这两个命名空间为例。
我有一个文件如下所示:
namespace Foo.Bar.Baz
{
static class Baz
{
public static void DoSomething()
{
Console.Writeline("Doing something...");
}
}
}
然后是第二个文件:
using Foo.Bar.Baz
namespace Foo.Bar.Quux
{
static class Quux
{
public static void GetToWork()
{
Baz.DoSomething();
}
}
}
现在,当我尝试编译时,第二个文件中出现错误,因为它认为 Baz 是命名空间而不是类。但是因为我有using Foo.Bar.Baz 行,所以在该命名空间中使用任何类都应该没问题,而不需要在它前面加上命名空间的名称,对吧?我可以正确使用该命名空间中的其他内容,但不能使用同名的类。
感觉就像编译器偷偷在每个文件中添加了这一行:using Foo.Bar。
此外,我不能只将静态 Baz 类放在 Foo.Bar 命名空间中,因为那时我会收到错误消息,指出 Foo.Bar.Baz 不是命名空间(因为我在该命名空间中有其他东西并且有文件使用该命名空间)。然后编译器似乎看到了静态类并确定Foo.Bar.Baz 是静态类而不是命名空间。
当然,我可以将静态类重命名为像 Manager 这样的名称,但我仍然需要在需要从两个名称空间访问内容的文件中拼出完整的 Baz.Manager.SomeMethod 和 Quux.Manager.SomeMethod。这感觉相当笨拙,我宁愿让它成为Baz.SomeMethod 和Quuz.SomeMethod。
有什么想法吗?
【问题讨论】:
-
我的想法是不要将类命名为命名空间
-
参见blogs.msdn.com/b/ericlippert/archive/2010/03/09/… 以及该系列的后续帖子。
-
(有重复的问题,但我现在没时间找。)
-
我不希望对类和命名空间使用相同的名称,但我就是想不出一个好的名称结构。 :(
标签: c# .net namespaces