我有:
namespace Book {
...
}
...
...
namespace Company
{
public class Book {
}
...
...
...
...
...
...
public class MyBook : Book.smth
{
}
}
我是如何实现的,作为 MyBook
继承顶级 Book
命名空间,而不是 Company
的?
最佳答案
首先,理想情况下,您一开始就不会陷入这种糟糕的境地。尝试命名您的 namespace 和类,以便它们不会与您的依赖项冲突!但有时这是不可避免的,尤其是当依赖项添加了您已经实现的功能时。
技巧 #1:
您可以使用 global::
修饰符来做到这一点。
namespace Company
{
namespace Xyz
{
public class DefaultClass {}
}
public class myClass: global::Xyz.DefaultClass
现在 Xyz.DefaultClass
指的是顶级 Xyz.DefaultClass
,而不是 Company.Xyz.DefaultClass
技巧#2:
在命名空间上使用using alias 指令:
using TheOtherXyz = Xyz;
namespace Company {
namespace Xyz
{
public class DefaultClass {}
}
public class MyClass : TheOtherXyz.DefaultClass
或在类里面:
using TheOtherDefault = Xyz.DefaultClass;
namespace Company {
namespace Xyz
{
public class DefaultClass {}
}
public class MyClass : TheOtherDefault
请注意,第二个变体不适用于泛型类。你可以说
using StringList = System.Collections.Generic.List<String>
但你不能说
using MyList<T> = System.Collections.Generic.List<T>
做一个通用的别名。这是一个非常明智的功能,只是从来没有足够高的优先级来添加它。
一个你没有问过的问题,但我还是会回答的:
What if I have namespace
N
with classC
in two different assemblies that I am referencing?N.C
is now ambiguous andglobal::
doesn't help, and neither does a using alias directive.
在那种不幸的情况下,您使用了一个外部别名指令,您可以在这里阅读它。
https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/extern-alias
如果您对发生此类名称冲突时可能出现严重错误的其他事情感兴趣,请在此处查看我关于该主题的文章:
https://blogs.msdn.microsoft.com/ericlippert/tag/namespaces/
关于c# - 当存在同名命名空间时(在当前范围内),如何引用它们中的任何一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49459324/