C# 中多个类的别名

2024-05-07

我想(正在努力)使我的代码更具可读性。我一直在使用以下类别名。

using Histogram = EmpiricScore<int>;
using FeatureHistogram = Dictionary<string, EmpiricScore<int>>;

但我认为类似(注意:我试图描述FeatureHistogram按照Histogram在这里,而不是EmpiricScore<int>>):

using Histogram = EmpiricScore<int>;
using FeatureHistogram = Dictionary<string, Histogram>;

看起来更具可读性(依赖关系可以更深入,如果我创建一个分层特征直方图会怎么样),并且更容易重构(如果我碰巧认为直方图这个名字很不幸)。但编译器不会这样做。为什么 ?有什么办法可以绕过这个吗?

创建新类似乎有点矫枉过正......


但编译器不会这样做。为什么 ?

根据 C# 规范 9.4.1,编译器不会执行此操作:

A using-alias-directive引入一个标识符,该标识符用作直接封闭的编译单元或命名空间主体中的命名空间或类型的别名。

using-alias-directive:
using   identifier   =   namespace-or-type-name   ;

其中的顺序using-alias-directives所写的内容没有任何意义,并且决议的namespace-or-type-name由a引用using-alias-directive不受using-alias-directive本身或由其他人using-directives在直接包含的编译单元或命名空间主体中。

换句话说,namespace-or-type-name of a using-alias-directive被解析,就好像直接包含的编译单元或命名空间主体没有 using 指令一样。

namespace N1.N2 {}
namespace N3
{
    using R2 = N1;          // OK
    using R3 = N1.N2;       // OK
    using R4 = R2.N2;       // Error, R2 unknown
}

选项: 1. 作为M.kazem Akhgary在评论中建议,定义新的命名空间

demo https://dotnetfiddle.net/6YT4kG

using Histogram = System.Collections.Generic.List<int>;

namespace TEST
{
    using FeatureHistogram = System.Collections.Generic.Dictionary<string, Histogram>;

    public class Program
    {    
        public static void Main()
        {
            var x = new Histogram();
            Console.WriteLine(x.GetType());

            var y = new FeatureHistogram();
            Console.WriteLine(y.GetType());
        }   
    }
}
  1. 创建更深层次依赖关系的类
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 中多个类的别名 的相关文章

随机推荐