问题描述
为了可读性,我有一个 using alias directive 来作为复杂类型的别名。
Animal
Cat
有没有什么办法可以从我的测试中引用 ColorMap 而不用另一个 namespace MyNamespace
{
using ColorMap = SortedDictionary<float,Color>;
public class Foo
{
public ColorMap colors = new ColorMap();
...
}
}
指令重复自己?
看来我应该可以做到namespace MyNamespace.Tests
{
public class TestFoo
{
[Fact]
public void TestFooCtor()
{
SortedDirctionary<float,Color> colorMap =
new SortedDirctionary<float,Color>
// Want to be able to just do this:
//ColorMap colorMap = new ColorMap();
...
}
}
}
?真的,我希望我可以让这个“typedef”归 Foo 类所有,然后可以通过说 using
来引用它。在 C# 中似乎都不可能?我如何做可以在客户端代码中使用的 C++ 风格的 typedef。
解决方法
不,你不能这样做:
using directive (C# Reference)
using 指令的范围仅限于它所在的文件 出现。
进一步说明:
Namespaces - C# language specifications
给定
namespace N3
{
using R = N1.N2;
}
namespace N3
{
class B: R.A {} // Error,R unknown
}
引入 R 的 using_alias_directive 的范围仅扩展 包含它的命名空间主体中的成员声明, 所以 R 在第二个命名空间声明中是未知的。
简而言之,它们仅在它们声明的封闭编译单元或直接命名空间中有效,并且仅限于它们所在的文件。