泛型类的继承与包含关系中的未指定标签
来源:互联网 发布:mac bombshell试色 编辑:程序博客网 时间:2024/06/05 02:46
1.继承
就继承关系而言,派生类的未指定参数类型标签必须包含所有父类未指定参数类型,否则报错。原因在于,如果派生类的参数类型标签没有涵盖父类的参数类型标签,则实例化派生类的时候,其父类的未指明具体类型的标签<T>仍然无法指定具体类型,所以产生错误。以下是几种常见的继承情况:
class BaseNode { }
class BaseNodeGeneric<T> { }
// concrete type
class NodeConcrete<T> : BaseNode { }
//closed constructed type
class NodeClosed<T> : BaseNodeGeneric<int> { }
//open constructed type
class NodeOpen<T> : BaseNodeGeneric<T> { }
//No error
class Node1 : BaseNodeGeneric<int> { }
//Generates an error
//class Node2 : BaseNodeGeneric<T> {}
//Generates an error
//class Node3 : T {}
class BaseNodeMultiple<T, U> { }
//No error
class Node4<T> : BaseNodeMultiple<T, int> { }
//No error
class Node5<T, U> : BaseNodeMultiple<T, U> { }
class SampleClass1<T> : IBaseInterface1<T> { } //No error
class SampleClass2<T> : IBaseInterface2<T, string> { } //No error
//Generates an error
//class Node6<T> : BaseNodeMultiple<T, U> {}
class NodeItem<T> where T : System.IComparable<T>, new() { }
class SpecialNodeItem<T> : NodeItem<T> where T : System.IComparable<T>, new() { }
class SuperKeyType<K, V, U>
where U : System.IComparable<U>
where V : new()
{ }
2.包含关系
当一个泛型类的实例作为另一个类的成员时,必须保证外层的泛型类的参数类型标签涵盖内层泛型类的参数类型标签。以下面的代码为例,MyClass类的参数类型标签,必须包括Node<T>泛型类的标签T。除非Node类的标签已经具体化,如指定T为string等,否则必须遵循这条原则。
ClassMyClass<T>
{
public Node<T> node = new Node<T>();
}
下面这个例子为错误例子:
//error,实例化MyClass时,Node的<T>标签无法具体化。
ClassMyClass
{
public Node<T> node = new Node<T>();
}
但下面这个例子是正确的
//right,Node类已经指明T的具体类型
ClassMyClass
{
public Node<string> node;
}
总结:继承关系,子类未知标签必须涵盖父类未知标签,就标签种类而言,前者是后者的超集;包含关系,外层类的未知标签必须涵盖内部类的未知标签,就标签种类而言,前者是后者的超集。
- 泛型类的继承与包含关系中的未指定标签
- 继承包含 与 组合包含的区别
- 继承与包含在程序设计中的使用
- 选择标签中不包含指定标签的其他元素
- Java中包含继承关系时对象的创建与销毁顺序详解(附源码)
- Java中的有参无参构造方法与继承的关系
- android去除掉界面头标签与状态栏(包含继承AppCompatActivity)的V7包下
- ios,设备标签与设备型号的对应关系(包含6plus)
- 聚合与继承的关系
- Spring中的继承与依赖关系
- 使用 xpath 定位包含指定文本内容的标签
- jsp中的包含标签的解释
- 私有继承和包含的关系和区别
- 浅析C++中的is-a和has-a关系(公有继承、包含、私有继承)
- 区间与区间的包含关系
- 抽象类与接口的异同浅谈,Java编程中的包含关系
- 包含与继承
- 私有继承与包含
- 对于OpenGL中光照和颜色混合的理解
- [转]列表控件排序功能的实现
- 一致性——《C++编程风格》读书笔记(三)
- C++设置和获取当前工作路径
- linux上使用BIND建立DNS服务器
- 泛型类的继承与包含关系中的未指定标签
- mysql 常用函数
- 设计模式
- 关于RUP的理论笔记
- Oracle 的数据导入导出及 Sql Loader (sqlldr) 的用法
- 关于路径 path
- 常思一二
- myeclipse时光标乱跳的问题
- LINUX中的SWAP分区