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#是否支持实现此目的的方法?
答案 0 :(得分:66)
是的,这是可能的。 你可以写:
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();
答案 1 :(得分:52)
这不是你在Pascal中所做的,但你可以使用using
- 指令。请查看how to use it
示例:
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();
}
}
}
答案 2 :(得分:17)
您可以创建一个类型:
class ComplexList : List<Tuple<int,string,int>> { }
这与别名并不完全相同,但在大多数情况下,您不应该看到任何差异。
答案 3 :(得分:14)
继承怎么样?
class ComplexList : List<Tuple<int, string, int>> {}
var complexList = new ComplexList();
这似乎是一个类似的概念,但在C#中没有直接等效的基于类型的别名,只有namespace aliases。
如果您想避免在代码中出现类型名称冲突,可以使用命名空间别名。
如果要创建一个“是”另一种类型的实例的新类型,继承是一种选择。
答案 4 :(得分:6)
从初始问题中显示的语法来看,看起来你真的只是问如何在C#中创建一个类,而不是如何为一个类型设置别名。
如果你想要一个比List<Tuple<int,string,int>>
更简单的名字,并且你希望它是“全局”(即不是每个文件),我会创建一个继承所述类并且没有声明其他成员的新类。像这样:
public class MyTrinaryTupleList: List<Tuple<int,string,int>> { }
这提供了一个管理位置,不需要额外的使用语句。
但是,我还会更进一步,冒险你可能不想要一个元组,而是另一个类,例如:
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类中。
答案 5 :(得分:3)
是的,你可以这样做,但是你需要指定完整的类型,即定义变为:
using ComplexList = System.Collections.Generic.List<System.Tuple<int,string,int>>;
这是针对每个文件指定的,非常类似于命名空间的using指令。
nitpick:传统上,.NET中的一种类型是PascalCased。
答案 6 :(得分:0)
只需简单的使用即可:
using Foo = System.UInt16;
public class Test {
public Foo Bar { get;set; }
}