C# 命名空间和类之间的名称冲突
我有一个包含多个名称空间的结构,在每个名称空间中我都有一个静态类,它是该名称空间网络中的一个小蜘蛛。就像部门的负责人 让我们以两个名称空间为例,C# 命名空间和类之间的名称冲突,c#,.net,namespaces,C#,.net,Namespaces,我有一个包含多个名称空间的结构,在每个名称空间中我都有一个静态类,它是该名称空间网络中的一个小蜘蛛。就像部门的负责人 让我们以两个名称空间为例,Foo.Bar.Baz和Foo.Bar.qux 我有一个文件如下所示: namespace Foo.Bar.Baz { static class Baz { public static void DoSomething() { Console.Writeline("Doing something..."); }
Foo.Bar.Baz
和Foo.Bar.qux
我有一个文件如下所示:
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是名称空间而不是类。但是因为我有一行使用Foo.Bar.Baz
,所以使用该名称空间内的任何类都应该是好的,而不需要在其前面加上名称空间的名称,对吗?我可以正确使用该名称空间中的其他内容,但不能使用同名的类
有点像是编译器在每个文件中秘密添加了这一行:使用Foo.Bar
此外,我不能将静态Baz
类放在Foo.Bar
名称空间中,因为我会收到错误,说Foo.Bar.Baz
不是名称空间(因为我在该名称空间中有其他内容,并且有使用该名称空间的文件)。然后,编译器似乎看到了静态类,并确定Foo.Bar.Baz
是一个静态类,而不是名称空间
当然,我可以将静态类重命名为类似于Manager的名称,但是我仍然需要在需要从两个名称空间访问内容的文件中详细说明完整的Baz.Manager.SomeMethod
和qux.Manager.SomeMethod
。这感觉相当笨拙,我宁愿它是Baz.SomeMethod
和quoz.SomeMethod
有什么想法吗?也许这有助于:
using Baz = Foo.Bar.Baz.Baz;
也许这会有帮助:
using Baz = Foo.Bar.Baz.Baz;
由于
Baz
是一个静态类,因此它不能包含实例成员。因此,DoSomething()
必须声明为静态方法
一旦你有了这个,你可以这样做:
using Foo.Bar.Baz;
public void GetToWork()
{
Baz.Baz.DoSomething();
}
或者这个:
using baz = Foo.Bar.Baz.Baz;
public void GetToWork()
{
baz.DoSomething();
}
但是,我同意您问题中的评论,即对命名空间(一组类的逻辑容器)及其包含类(封装数据和行为)使用相同的名称可能会导致可读性/可维护性问题。因为
Baz
是一个静态类,所以它不能包含实例成员。因此,DoSomething()
必须声明为静态方法
一旦你有了这个,你可以这样做:
using Foo.Bar.Baz;
public void GetToWork()
{
Baz.Baz.DoSomething();
}
或者这个:
using baz = Foo.Bar.Baz.Baz;
public void GetToWork()
{
baz.DoSomething();
}
但是,我同意您问题中的评论,即对名称空间(一组类的逻辑容器)及其包含类(封装数据和行为)使用相同的名称可能会导致可读性/可维护性问题。我的想法不是给名称空间和本系列后续文章中的类命名。(有重复的问题,但我现在没有时间找到它们。)我不想对类和命名空间使用相同的名称,但我就是想不出一个好的名称结构。:(我的想法不是给像NamespaceSee这样的类命名,也不想在本系列的后续文章中命名。(有重复的问题,但我现在没有时间找到它们。)我不希望对类和命名空间使用相同的名称,但我就是想不出一个好的名称结构(