12.3.1 定义泛型类
class Farm<T1,T2> {...}
定义类型之后,可以像使用其他类型一样使用它们。
注意:
- 只读访问;
- 不使用反射的条件下功能简单;
- 可以实现对集合的操作;
- 在比较为反省提供的类型值和null时,只能使用
==
或者!=
。
所以,对泛型进行实际操作时,需要更多地了解类中使用的类型。
default关键字
避免引用类型与值类型在赋值时错误
引用类型:null
值类型:如数字0
约束类型 constranining
class Farm<T1, T2> : MyBaseClass
where T1 : contraint1 where T2 : contraint2{ ... }
注意:
两个或者多个泛型类型不能互为约束
从泛型类中继承
首先,如果某个类型所继承的基类型中收到了约束,该类型就不能“接触约束”。
另外,如果继承自一个泛型类型,就必须提供所必须的类型信息。
泛型运算符
implict 隐式转换
泛型结构
public struct MyStruct<T1,T2>
{
public T1 item1;
public T2 item1;
}
12.3.1 定义泛型接口
interface IMyFarming<T>
where T : Animal
{
bool AttemptToBreed(T animal1, T animal2);
T OldestIntHerd { get; }
}
12.3.1 定义泛型方法
非泛型类的泛型方法
泛型类的泛型方法
12.3.1 定义泛型委托
public delegate T1 MyDelegate<T1, T2>(T1 op1, T2 op2)
where T1 : T2;