目录
泛型类的示例
c# 可以把以下类型编写为泛型:
- 类、结构、接口、委托和方法。注意前四个是类型,方法是成员。
下面是一个泛型栈的代码示例:
namespace HelloWorld_Console
{
class MyStack<T>
{
const int MaxStack = 10;
T[] StackArray;
int StackPointer = 0;
public MyStack()
{
StackArray = new T[MaxStack];
}
public void Push(T x)
{
if (!IsStackFull)
StackArray[StackPointer++] = x;
}
public T Pop()
{
return (!IsStackEmpty) ? StackArray[--StackPointer] : StackArray[0];
}
public void Print()
{
for (int i=0;i<StackPointer;++i)
{
WriteLine($"输出值为:{StackArray[i]}");
}
}
bool IsStackFull
{
get
{
return StackPointer >= MaxStack;
}
}
bool IsStackEmpty
{
get
{
return StackPointer <= 0;
}
}
}
class Program
{
static void Main(string[] args)
{
MyStack<int> StackInt = new MyStack<int>();
MyStack<string> StackString = new MyStack<string>();
var StackDouble = new MyStack<double>(); //使用 var 关键字让编译器自己判断类型
StackInt.Push(3);
StackInt.Push(5);
StackInt.Push(7);
StackInt.Push(9);
StackInt.Print();
ReadKey();
}
}
}
where 字句 (317P)
要让泛型变得更有用, 我们需要提供额外的信息让编译器知道类型参数可以接受哪些类型。这些额外的信息叫做约束( constrain ),只有符合约束的类型才能替代给定的类型参数, 来产生构造类型。
那么约束 使用 where 字句。
- 每个具有约束的类型参数都有自己的where子句。
- 如果参数具有多个约束,则它们将在where子句中列出,以逗号分隔。
where 字句的语法如下:
![]()
where 字句的语法
例如, 如下泛型类有3个类型参数。
- T1是未绑定的, 对于T2只有 Customer类型 或从Customer继承的类型的类才能用作类型实参,
- 而对于T3只有实现IComparable接口的类才能用于类型实参。
有哪些类型可以被 where 子句所约束 (318P)
共有五种类型的约束,如图:
where子句可以以任何次序列出。然而, where子句中的约束列表中的约束必须有特定的顺序:
- 最多只能有一个主约束,如果有则必须放在第一位。
- 可以有任意多的


1480

被折叠的 条评论
为什么被折叠?



