定义types别名

Pascal的一个特点是,我发现非常有用的是命名数据types的能力,例如

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; 

所以,如果我必须改变数据types的定义,我可以在一个地方做到这一点。

C#支持一种方法来实现这一点?

你在Pascal中做什么并不令人兴奋,但是你可以使用-directive。 看看这里如何使用它

例:

 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(); } } } 

是的,这是可能的。 你可以写:

 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 { } 

然后用它作为一个types:

 MyAlias test = new MyAlias(); 

你可以创build一个types:

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

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

那inheritance呢?

 class ComplexList : List<Tuple<int,string,int>> {} var complexList = new ComplexList(); 

这似乎是一个类似的概念(有好处)。

从最初的问题中显示的语法,看起来你真的只是问如何在C#中创build一个类,而不是如何别名types。

如果你想要一个比List<Tuple<int,string,int>>更简单的名字,并且你希望它是“全局的”(也就是不是每个文件),我会创build一个新类来inheritance这个类并声明没有额外的成员。 喜欢这个:

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

这给了pipe理一个单一的位置,并且不需要额外的使用陈述。

不过,我还要更进一步,冒险说你可能不想要一个元组,而是另一个类,比如:

 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; } } 

然后为您的列表types,您可以执行以下操作:

 public class PersonList: List<Person> { } 

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

是的,你可以这样做,但是你需要指定完整的types,即定义变成:

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

这是每个文件指定的,就像名称空间的using指令一样。

nitpick:传统上,.NET中的一个types是PascalCased。

只是一个简单的使用会做:

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