在C#中创建一个新类型的数组

本文关键字:新类型 类型 数组 一个 创建 | 更新日期: 2024-10-21 18:23:46

是否可以在C#中从现有类型创建一个新类型。这在C中很容易实现,但我不知道在C#中是如何做到的。类似这样的东西:

type Map int[,]

在C#中创建一个新类型的数组

据我所知,没有,也没有。

继承

不能从数组类型继承。

引用C#5.0规范第10.1.4.1节

类类型的直接基类不能是以下任何类型:System.ArraySystem.DelegateSystem.MulticastDelegateSystem.EnumSystem.ValueType。此外,泛型类声明不能将System.Attribute用作直接或间接基类。

我能想到的最接近的是添加一个扩展方法,但这当然不是你想要的。

别名

别名可以使用代码文件顶部的using指令设置:

using Map = System.Int32;

但据我所知,这并不支持数组类型。

引用C#5.0规范第9.4.1节,using别名看起来像

使用标识符=命名空间或类型名称;

namespace-or-type-name在第3.8节中进行了定义,并且没有提及任何关于数组类型的内容。

如果您的唯一目的是"使用Map而不是int[,]",则可以创建具有索引属性的Map类

public class Map
{
  private int[,] _map;
  public Map(int rows, int columns)
  {
    // rows, columns validation here
    _map = new int[rows, columns];
  }
  public int this[int r, int c]
  {
    get { return _map[r,c]; }
    set { _map[r,c] = value; }
  }
}

不短于type Map int[,],但提供了所需的结果。示例:

Map m = new Map(4,4);
m[2,2] = 1;