D- 泛型练习 ,继承,方法

unit Unit3;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,System.Generics.Collections;

type
  TForm3 = class(TForm)
    btn1: TButton;
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  THttpResult<T: TStrings, constructor> = class   //限定T 为某个类型,
  private
    fIsSucc: Boolean;
    fData: T;
    fMsg: string;
    fUrl: string;
    fParamStr: string;
  public
  end;
  ThttpResultA =class(THttpResult<TStrings>)
  end;
  ThttpResults =class(THttpResult<TStringList>)
  end;
  A<T> =class
  end;
  AA<T> =class(A<T>) //AA=class(A<T>) 这样写会提示说为定义T
  end;
  B=class(A<ThttpResultA>) //B=class(A<int>)  这里会错误, B<T>=class(A<int>)这样不错
  end;
  C<B>=class(A<ThttpResultA>) //这里的B并不是B类,而是一个没有任何意义的 占位符
  end;
  D<T>=class(A<ThttpResultA>) //这里的B并不是B类,而是一个没有任何意义的 占位符
  private
    fIsSucc :Boolean;
  public
    function QueryData<B>(url:string):string;
    function QueryData2<T>(url:string):string; //QueryData<T>(url:string):string; 这样会被认为和上一个函数相同
  end;
  TGQlist<T> = class(TList<T>)  //包含System.Generics.Collections,   TGQlist= class(TList<T>) 这样写是错误的
  end;
var
  Form3: TForm3;

implementation

{$R *.dfm}

procedure TForm3.btn1Click(Sender: TObject);
var
  temp :TStringList;
  temp2 :A<string>;   //可以这么用法。
begin
  temp2 := A<string>.Create;  //创建类
end;

{ D<T> }

function D<T>.QueryData<B>(url: string): string;
begin
  //
end;

function D<T>.QueryData2<T>(url: string): string;
begin

end;

end.
时间: 2024-12-08 20:47:24

D- 泛型练习 ,继承,方法的相关文章

js oop中的三种继承方法

JS OOP 中的三种继承方法: 很多读者关于js opp的继承比较模糊,本文总结了oop中的三种继承方法,以助于读者进行区分. <继承使用一个子类继承另一个父类,子类可以自动拥有父类的属性和方法.(继承的两方,发生在两个类之间)> 一.通过object实现继承 1:定义父类 function Parent(){} 2:定义子类 funtion Son(){} 3:通过原型给Object对象添加一个扩展方法. Object.prototype.customExtend = function(p

JS中的类,类的继承方法

大牛请无视此篇! 首先我们定义一个类,方法很简单,就像我们定义函数一样,只不过我们为了与函数区分,名称首字母要大写,看代码: function Person (){ } 这就是一个很简单的Poson类,然后我们通过类来进行实例化对象,通俗的说创建对象吧,我们以前用过的json对象,和我们现在要用的标准对象 //简单的json对象(此对象与Person类没任何关系,只是让大家观察两者的写法区别) var obj = { name:‘lemon’, age:'18' } //通过Person来实例化

《objective-c基础教程》学习笔记(五)—— 继承方法

在上一篇博文中,我们将原先的纯C语言代码,编写成了用Objective-C(后面直接缩写成OC)的写法.使得代码在易读性上有明显提升,结构也更清晰.同时,也对面向对象的概念有了进一步的介绍和加深. 但是,通过上一个例子,我们发现代码的冗余还是很大.像Circle,Rectangle和Egg的定义和实现方法几乎代码都是基本相同,只有个别地方不同.那么,有什么好方法来优化这些代码呢?今天这篇博文的重点就是要介绍继承这个方法,它将会有效的解决上面说的这个问题. 正如你从亲生父母那里继承一些特性(头发的

jQuery源码06-jQuery = function(){};给JQ对象,添加一些方法和属性,extend : JQ的继承方法,jQuery.extend()

/*! * Includes Sizzle.js 选择器,独立的库 * http://sizzlejs.com/ */ (function( window, undefined ) { //"use strict"; var // rootjQuery = jQuery(document) = $();压缩有用 rootjQuery, // dom是否加载完 readyList, // core_strundefined == 'undefined' core_strundefined

JS原型链与几种继承方法的对比

继承的方式有两种:接口继承.实现继承接口继承:即虚函数,父类只定义接口,不具体实现子类继承接口,自己负责实现这个方法,运行时动态决定调用哪个实现.实现继承:父类实现的方法,子类可以直接调用 JS中只支持实现继承,以原型链来实现. 回顾一下构造函数.原型.实例的关系:每个构造函数都有一个原型对象,原型对象又都包含一个constructor指针指向构造函数,实例包含一个_proto_内部属性指向原型对象. 继承的实现方法(父类型叫Parent,子类型叫Child)原本Child.prototype

[Java问题] 继承方法调用问题

由于用java的时间不长,一上来就让我把一个软件从matlab移到java中,所以不断出现了很多问题,解决这些问题最快的方法就是写一些小代码调试和上网问度娘,另一个方法是问师兄,但是跟他们描述一个问题的时候比我上网搜发的时候还多,另外他们也未必知道答案,所以第二个方法我很少用,这也是我写这篇文章的原因,把问题写下来,慢慢思考,随着java技术的增进,说不定会解决,即使不能解决,下一次编程的时候,我也知道这样编写代码是不能达到我的要求的,要换一中方法. 说了这么多,来说我遇到的继承方法调用的问题吧

5种JS继承方法

<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.jb51.net/" /> <title>5种JS继承方法</title> <script type="text/javascript"> //1

java基础之泛型的继承

关于泛型的基本介绍和理解请参考以下几篇文章,或查询更多资料: 泛?型?与?泛?型?继?承 泛型(包括泛型抽象类的继承) 泛型的继承测试 本篇以简单的List<>方式来进行说明. ArrayList<Object>继承了List<Object>, ArrayList<String>没有继承List<Object> List<?>等价于List<? extends Object> 请参考以下代码: /** * author D

跟王老师学泛型(五): 自定义带泛型声明的方法

带泛型声明的方法 主讲教师:王少华 QQ群:483773664 学习目标: 掌握泛型方法的定义 掌握泛型方法的使用 一.需求 假设需要实现这样一个方法,该方法负责将一个Object数组的所有元素添加到一个Collection集合中. 1 2 3 4 5 6 7 8 9 10 /**      * 将array中的元素添加到colleciotn中      * @param array      * @param c      */     public void fromArrayToColle

Date类型之继承方法

ECMAScript中的Date类型是在早期Java中的java.util.Date类型基础上构建的.为此,Date类型使用自UTC(国际协调时间)1970年1月1日午夜零时开始经过的毫秒数来保存日期.可以使用new操作符和Date构造函数创建日期对象,在使用Date构造函数而不传递参数的情况下,新创建的对象自动获取当前的时间日期.如果想要根据特定的日期和时间创建日期对象,就必须传入表示该日期的毫秒数(从UTC时间1970年1月1日午夜零时起至该日期止经过的毫秒数),为了简化计算过程,ECMAS