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

时间:2015-03-07 05:19:42

标签: c#

是否可以从现有类型在C#中创建新类型。这在C中很容易实现,但我无法弄清楚如何在C#中完成这项工作。像这样:

type Map int[,]

2 个答案:

答案 0 :(得分:6)

不,不,据我所知。

继承

您不能从数组类型继承。

引用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别名如下,

  

使用identifier = namespace-or-type-name;

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

答案 1 :(得分:2)

如果您的唯一目的是“使用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;