定义类型别名

本文关键字:别名 类型 定义 | 更新日期: 2023-09-27 18:24:10

Pascal的一个功能我发现非常有用,那就是能够命名数据类型,例如

type
 person: record
             name: string;
             age: int;
         end;
var
 me: person;
 you: person;
etc

你能在C#中做一些类似的事情吗?我想做一些类似的事情

using complexList = List<Tuple<int,string,int>>;
complexList peopleList;
anotherList otherList;

因此,如果我必须更改数据类型的定义,我可以在一个地方完成。

C#支持实现这一点的方法吗?

定义类型别名

是的,这是可能的。这里的工作示例。你可以写:

using System;
using System.Collections.Generic;
namespace ConsoleApplication12
{
    using MyAlias = List<Tuple<int, string, int>>;
}

或者,如果在命名空间之外声明:

using System;
using System.Collections.Generic;
using MyAlias = System.Collections.Generic.List<System.Tuple<int, string, int>>;
namespace ConsoleApplication12
{
}

然后将其用作一种类型:

MyAlias test = new MyAlias();

这不是您在Pascal中所做的,但您可以使用using-指令。看看这里如何使用

示例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MyList = Dummy2.CompleXList;
namespace Dummy2
{
    public class Person 
    {
    }
    public class CompleXList : List<Person> 
    { 
    }

    class Program
    {
        static void Main(string[] args)
        {
            MyList l1 = new MyList();
        }
    }
}

您可以创建一个类型:

class ComplexList : List<Tuple<int,string,int>> { }

这与别名并不完全相同,但在大多数情况下,您不应该看到任何差异。

是的,您可以这样做,但您需要指定完整的类型,即定义变为:

using ComplexList = System.Collections.Generic.List<System.Tuple<int,string,int>>;

这是按文件指定的,非常类似于命名空间的using指令。

挑剔:按照惯例,.NET中的一个类型是PascalCased。

从最初问题中显示的语法来看,您实际上只是在问如何在C#中创建一个类,而不是如何对类型进行别名。

如果您希望键入一个比List<Tuple<int,string,int>>更简单的名称,并且希望它是"全局的"(即不是每个文件),我会创建一个新的类,该类继承了所述类,并且没有声明其他成员。像这样:

public class MyTrinaryTupleList: List<Tuple<int,string,int>> { }

这提供了一个单一的管理位置,并且不需要额外的using语句。

然而,我也会更进一步,大胆地说,你可能不想要Tuple,而是想要另一个类,比如:

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public int FavoriteNumber { get; set; }
    public Person() { }
    public Person(string name, int age, int favoriteNumber) 
    { 
        this.Name = name; 
        this.Age = age; 
        this.FavoriteNumber = favoriteNumber; 
    }
}

然后,对于您的列表类型,您可以执行以下操作:

public class PersonList: List<Person> { }

此外,如果您需要其他特定于列表的帮助器属性或方法,也可以将它们添加到PersonList类中。

只需简单使用即可:

using Foo = System.UInt16;
public class Test {
  public Foo Bar { get;set; }
}