C#中是否可以给类取别名(不使用'using')?

3
在Delphi中,以下操作是可行的:
class Alias = Dictionary<long, object>;

现在Alias是一个dictionary<long, object>

在C#中是否可能实现这个?我从来没有找到过不需要将字典封装到自定义类中的方法。

using指令无法使用,因为它仅在出现的文件中有效。


using 别名确实只适用于其所在的文件(甚至是命名空间声明),但为什么不在所有相关文件中重复相同的 using 别名呢?可能有很多普通的 using 会被重复使用,比如 using System; 等等,因此我认为在每个文件中都有 using Alias = System.Collections.Generic.Dictionary<long, object>; 或类似的别名并不是一个问题。 - Jeppe Stig Nielsen
我按照你的建议使用了 'using',但只在类型仅定义一次的情况下使用。我不希望别名在不同的文件中具有不同的含义。这是我做出的一个鲁棒性设计决策。 - IamIC
2个回答

4

在C#中,这是无效的。

如果你想让Alias成为一个字典(Dictionary),你可以像下面这样继承Dictionary类。

public class Alias : Dictionary<long, object>

4
并不完全是这样。 但您可以这样做:
public class Alias : Dictionary<long, object>
{
}

这意味着您可以在任何需要 Dictionary<long, object> 实例的位置使用 Alias。但是您不能在需要 Alias 的地方使用 Dictionary<long, object>
然而,您可以创建一个隐式操作符来无缝地将 Dictionary<long, object> 转换为 Alias 实例:
public class Alias : Dictionary<long, object>
{
    public Alias() {}
    public Alias(Dictionary<long, object> dictionary)
    {
        foreach(var kvp in dictionary)
            Add(kvp);
    }

    public static implicit operator Alias (Dictionary<long, object> dictionary)
    {
        return new Alias(dictionary);
    }
}

请注意,这个隐式转换操作符会创建一个字典的副本,可能会出乎意料或不必要。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接