我想(我想)让我的代码更具可读性。我一直在使用以下类别别。
using Histogram = EmpiricScore<int>;
using FeatureHistogram = Dictionary<string, EmpiricScore<int>>;
但我认为(注意:我试图用FeatureHistogram
来描述Histogram
,而不是EmpiricScore<int>>
):
using Histogram = EmpiricScore<int>;
using FeatureHistogram = Dictionary<string, Histogram>;
似乎更具可读性(依赖关系可以更深入,如果我创建一个Hierarchical特征直方图怎么办),并且更容易重新分解(如果我碰巧决定名称Histogram是不幸的)。但编译器不会这样做。为什么?有什么方法可以绕过这个吗?
创建新类似乎有点矫枉过正......
答案 0 :(得分:3)
创建新类似乎有点矫枉过正......
我认为这不是一种矫枉过正,因为如果你设计一个包装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...
}
答案 1 :(得分:3)
但编译器不会这样做。为什么?
编译器不会根据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
的影响立即包含编译单元或命名空间体中的{1}}。换句话说,
namespace-or-type-name
的{{1}}被解析为好像直接包含的编译单元或命名空间体没有使用指令。
using-alias-directive
选项:
1.在评论中建议namespace N1.N2 {}
namespace N3
{
using R2 = N1; // OK
using R3 = N1.N2; // OK
using R4 = R2.N2; // Error, R2 unknown
}
,定义新的命名空间
M.kazem Akhgary