关于命名空间的一篇文章说
命名空间是C#程序元素,旨在帮助您组织您的 程式。他们还提供帮助,以避免姓名冲突 两组代码之间。在您自己的代码中实现命名空间是 一个好习惯,因为它可能会在以后拯救你免于问题 你想重用一些代码。例如,如果您创建了一个 名为Console的类,您需要将它放在您自己的命名空间中 确保System.Console何时没有任何混淆 应该使用类或者应该使用类。
现在假设我在上面的语句中确实在我的命名空间中创建了一个名为Console
的{{1}}类。
现在,当某人想要使用说我的图书馆时,他/她必须这样做:
myNamespace
但很可能她需要做
using myNamespace;
太
所以我们仍然有冲突。如果我输入using System;
,我指的是哪个控制台?
如何使用命名空间解决此问题?
PS。额外的:还有名称空间如何在幕后工作:我记得某些地方我读过编译器只是预编程函数,例如用命名空间来查找它们的定义?
这是吗?命名空间真的不仅仅是一种分组代码的方法吗?答案 0 :(得分:5)
如果您同时使用这两个命名空间,则必须完全限定用法(System.Console()
),或使用命名空间/类型别名(Console2
)来消除类型的歧义。
using Console1 = myNamespace;
using Console2 = System;
public void MyMethod()
{
Console1.Console(); // or myNamespace.Console()
Console2.Console(); // or System.Console()
}
答案 1 :(得分:4)
您不会同时包含两个using语句。 您选择,因此您的代码看起来更干净:
using System;
public static void Main()
{
Console.WriteLine("I'm here!");
myNameSpace.Console.PopBeer("Mo beer!");
}
出于实际目的,如果你有一个非常长的命名空间,你也可以使用别名:
using System;
using sexyNs = myProject.AwesomeSolution.Helpers;
public static void Main()
{
Console.WriteLine("I'm here!");
sexyNs.Console.PopBeer("Mo beer!");
}
答案 2 :(得分:0)
程序无法编译。您需要像这样实例化您的类:
Ninja
答案 3 :(得分:0)
更好的解决方案是避免使用导致冲突的名称。将您的控制台命名为其他内容,以便在需要时清楚显示您使用的控制台。
答案 4 :(得分:0)
@ user200300,已经有很多人为你的问题描述提供了确切的代码解决方案。但是让我试着清楚解释.Namespaces也提供了避免名字冲突的帮助。
例如:假设有一个名为Stackoverflow的项目,它包含TeamA和TeamB两个团队。
namespace Stackoverflow
{
namespace TeamA
{
class classA
{
public static void Print()
{
Console.WriteLine("Print A");
}
}
}
}
namespace Stackoverflow
{
namespace TeamB
{
class classA
{
public static void Print()
{
Console.WriteLine("Print B");
}
}
}
}
团队TeamA和TeamB都试图修改同一个类classA.Namespaces有助于以高效且适当的方式组织代码。 如果您想从这些名称空间之外的任何团队或任何类中访问print方法,那么您可以像
那样编写Stackoverflow.TeamA.classA.Print();
Stackoverflow.TeamB.classA.Print();
所以上面的代码很麻烦且冗长而且不干净。可以使用强制别名。
using STAP=Stackoverflow.TeamA;
using STBP=Stackoverflow.TeamB();
现在您可以轻松访问。
STAP.classA.print();//TeamA's print method.
因此命名空间可以包含命名空间,类,接口,结构,枚举,委托