【问题标题】:C# can a class be aliased (not with 'using')C# 可以给类起别名(不能使用 'using')
【发布时间】:2013-05-08 07:36:39
【问题描述】:

在 Delphi 中,以下是可能的:

class Alias = Dictionary<long, object>;

别名现在是dictionary&lt;long, object&gt;

这在 C# 中可能吗?我从来不知道如何不必将字典包装到自定义类中。

using 指令不起作用,因为它是它所在的文件的本地文件。

【问题讨论】:

  • using 别名确实只适用于它所在的文件(甚至命名空间声明),但为什么不在所有相关文件中重复相同的 using 别名呢?重复的可能有很多普通的usings,比如using System;等等,所以我认为每个文件中都有using Alias = System.Collections.Generic.Dictionary&lt;long, object&gt;;或类似的东西没有问题。
  • 我按照您建议的方式使用“使用”,但仅限于类型定义一次的情况。我不希望别名在不同文件中可能具有不同的含义。只是我做出的稳健性设计决定。

标签: c# class c#-4.0 types alias


【解决方案1】:

不完全是。

但你可以这样做:

public class Alias : Dictionary<long, object>
{
}

这意味着您可以在任何需要Dictionary&lt;long, object&gt; 实例的地方使用Alias。但是你不能在需要Alias 的地方使用Dictionary&lt;long, object&gt;

但是,您可以创建一个隐式运算符以透明地从 Dictionary&lt;long, object&gt; 转换为 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);
    }
}

请注意,此隐式转换运算符将创建字典的副本,这可能是意外或不希望的。

【讨论】:

    【解决方案2】:

    不,这在 C# 中无效。

    如果您希望 Alias 成为 Dictionary 您可以像这样继承 Dictionary 类。

    public class Alias : Dictionary<long, object>
    

    【讨论】:

      猜你喜欢
      • 2014-08-04
      • 1970-01-01
      • 2018-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-04
      • 2020-08-06
      • 2013-09-06
      相关资源
      最近更新 更多