[英]Aliasing multiple classes in C#
我想(我想)让我的代码更具可读性。 我一直在使用以下类别名。
using Histogram = EmpiricScore<int>;
using FeatureHistogram = Dictionary<string, EmpiricScore<int>>;
但我认为(注意:我试图用Histogram
来描述FeatureHistogram
,而不是EmpiricScore<int>>
):
using Histogram = EmpiricScore<int>;
using FeatureHistogram = Dictionary<string, Histogram>;
看起来更具可读性(依赖关系可以更深入,如果我创建一个Hierarchical特征直方图怎么办),并且更容易重新分解(如果我碰巧确定名称Histogram是不幸的)。 但编译器不会这样做。 为什么? 有什么方法可以绕过这个?
创建新类似乎有点矫枉过正......
创建新类似乎有点矫枉过正......
我觉得它不是一种矫枉过正,因为如果你设计一个包装Dictionary<string, Histogram>
的类(你的类应该实现IDictionary<string, Histogram>
并且有一个私有Dictionary<string, Histogram>
属性支持数据)你重新实施可重用性 ,这是面向对象编程的最佳卖点之一。
例如,您的实现将如下所示:
public class FeatureHistorgram : IDictionary<string, Historam>
{
private readonly Dictionary<string, Histogram> _data = new Dictionary<string, Histogram>();
public void Add(string key, Histogram value)
{
_data.Add(key, value);
}
// ... and the rest of IDictionary<TKey, TValue> interface members...
}
但编译器不会这样做。 为什么?
根据C#规范9.4.1,编译器不会这样做:
using-alias-directive
引入了一个标识符,该标识符充当直接封闭的编译单元或命名空间体中的命名空间或类型的别名。
using-alias-directive:
using identifier = namespace-or-type-name ;
其中,为了
using-alias-directives
被写入没有任何意义,而且分辨率namespace-or-type-name
由引用的using-alias-directive
不会受到using-alias-directive
本身或其他using-directives
立即包含编译单元或命名空间体中的using-directives
。换句话说,
using-alias-directive
的namespace-or-type-name
被解析为好像直接包含编译单元或命名空间体没有using-directives。
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
在评论中建议的那样,定义新的命名空间
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());
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.