.Net 范型笔记(2) 继承性 替换性 inheritance substitutabliity
Posted on 2005-07-15 16:35 美丽软件 阅读(361) 评论(0) 编辑 收藏 举报
继承
A generic class that uses parameterized types, like
开放结构的范型,闭结构的范型
从范型继承派生子类时要注意父类型的范型参数列表要么直接指定(类似与STL中特化,或者就是说象声明了一个范型类的新类型一样),要么把父类型的范型参数包含在子类型的参数列表中,
其意义就是只根据子类型的参数列表来声明实际的类时父类型的参数类型应该能够确定。
比如
Father<T>
派生的子类应该这样定义
Child<T,D,...>:Father<T> 通过子类的参数列表指定父类的参数类型
Child<D>:Father<int> 把父类的参数类型指定成实际的类型
替换原则
如果B从A继承,那么在任何能够使用A的地方,B也得能构使用
比如Apple从Fruit派生,Basket<Apple>不是Basket<Fruit>的子类,他们是不同的型
但是怎么在能够接收一框水果的地方传递一框苹果呢?答案是使用约束
public void Eat<T>(Basket<T> fruits) where T:Fruit
在Java中是public void Eat<T>(Basket<T extends Fruit> fruit)
A generic class that uses parameterized types, like
MyClass1<T>
, is called
an open-constructed generic. A generic class that uses no parameterized types,
like MyClass1<int>
, is called a closed-constructed generic开放结构的范型,闭结构的范型
从范型继承派生子类时要注意父类型的范型参数列表要么直接指定(类似与STL中特化,或者就是说象声明了一个范型类的新类型一样),要么把父类型的范型参数包含在子类型的参数列表中,
其意义就是只根据子类型的参数列表来声明实际的类时父类型的参数类型应该能够确定。
比如
Father<T>
派生的子类应该这样定义
Child<T,D,...>:Father<T> 通过子类的参数列表指定父类的参数类型
Child<D>:Father<int> 把父类的参数类型指定成实际的类型
替换原则
如果B从A继承,那么在任何能够使用A的地方,B也得能构使用
比如Apple从Fruit派生,Basket<Apple>不是Basket<Fruit>的子类,他们是不同的型
但是怎么在能够接收一框水果的地方传递一框苹果呢?答案是使用约束
public void Eat<T>(Basket<T> fruits) where T:Fruit
在Java中是public void Eat<T>(Basket<T extends Fruit> fruit)