CH12.3 定义泛型类型


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;

练习代码

猜你喜欢

转载自blog.csdn.net/qq_34332733/article/details/79392418