Pascal的一个特性我发现非常有用的是命名数据类型的能力,例如
type
person: record
name: string;
age: int;
end;
var
me: person;
you: person;
etc
Run Code Online (Sandbox Code Playgroud)
你能用C#做类似的事吗?我希望能够做类似的事情
using complexList = List<Tuple<int,string,int>>;
complexList peopleList;
anotherList otherList;
Run Code Online (Sandbox Code Playgroud)
因此,如果我必须更改数据类型的定义,我可以在一个地方完成.
C#是否支持实现此目的的方法?
ken*_*n2k 73
是的,这是可能的.你可以写:
using System;
using System.Collections.Generic;
namespace ConsoleApplication12
{
using MyAlias = List<Tuple<int, string, int>>;
}
Run Code Online (Sandbox Code Playgroud)
或者,如果在命名空间外声明:
using System;
using System.Collections.Generic;
using MyAlias = System.Collections.Generic.List<System.Tuple<int, string, int>>;
namespace ConsoleApplication12
{
}
Run Code Online (Sandbox Code Playgroud)
然后将其用作类型:
MyAlias test = new MyAlias();
Run Code Online (Sandbox Code Playgroud)
Mit*_*dir 60
你在Pascal中做的并不是很令人兴奋,但你可以使用using
-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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
Ser*_*ier 21
您可以创建一个类型:
class ComplexList : List<Tuple<int,string,int>> { }
Run Code Online (Sandbox Code Playgroud)
这与别名不完全相同,但在大多数情况下,您不应该看到任何差异.
Jod*_*ell 16
继承怎么样?
class ComplexList : List<Tuple<int, string, int>> {}
var complexList = new ComplexList();
Run Code Online (Sandbox Code Playgroud)
这似乎是一个类似的概念,但在C#中没有直接等效的基于类型的别名,只有名称空间别名.
如果要避免在代码中出现类型名称冲突,可以使用命名空间别名.
如果要创建一个"是"另一种类型的实例的新类型,继承是一种选择.
从初始问题中显示的语法来看,看起来你真的只是在询问如何在C#中创建一个类,而不是如何为一个类型设置别名.
如果你想要一个更简单的名字输入List<Tuple<int,string,int>>
,并且你希望它是"全局的"(即不是每个文件),我会创建一个继承所述类并且没有声明其他成员的新类.像这样:
public class MyTrinaryTupleList: List<Tuple<int,string,int>> { }
Run Code Online (Sandbox Code Playgroud)
这给了一个单独的管理位置,而不需要额外的使用语句.
但是,我还会更进一步,冒险你可能不想要一个元组,而是另一个类,例如:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,对于列表类型,您可以执行以下操作:
public class PersonList: List<Person> { }
Run Code Online (Sandbox Code Playgroud)
此外,如果您需要其他列表特定的辅助属性或方法,您也可以将它们添加到PersonList类.
是的,您可以这样做,但是您需要指定完整类型,即定义变为:
using ComplexList = System.Collections.Generic.List<System.Tuple<int,string,int>>;
Run Code Online (Sandbox Code Playgroud)
这是按文件指定的,很像命名空间的 using 指令。
挑剔:通常,.NET 中的类型是 PascalCased。