如何从另一个类/文件引用使用别名指令

问题描述

为了可读性,我有一个 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 在第二个命名空间声明中是未知的。

简而言之,它们仅在它们声明的封闭编译单元或直接命名空间中有效,并且仅限于它们所在的文件。