当前位置: 首页 > news >正文

夜夜做新郎网站lol关键词查询

夜夜做新郎网站,lol关键词查询,flash制作教程,做fcr的网站14.3.2 特定类约束 ​ 如果您的泛型类需要使用某个特定子集的类&#xff08;特定层次结构&#xff09;&#xff0c;则可能需要根据给定基类指定约束。 ​ 例如&#xff0c;如果您声明&#xff1a; typeTCompClass<T: TComponent> class​ 则此泛型类的实例仅适用于组…
14.3.2 特定类约束

​ 如果您的泛型类需要使用某个特定子集的类(特定层次结构),则可能需要根据给定基类指定约束。

​ 例如,如果您声明:

typeTCompClass<T: TComponent> = class

​ 则此泛型类的实例仅适用于组件类,即任何TComponent后代类。这使您拥有一个非常特定的泛型类型(是的,听起来很奇怪,但这确实是它的实际情况),并且编译器将允许您在处理泛型类型时使用TComponent类的所有方法。

​ 如果这看起来非常强大,那么请三思。如果你考虑一下利用继承和类型兼容规则可以实现的功能,也许你可以使用传统的面向对象技术来解决同样的问题,而不必使用泛型类。我并不是说特定的类约束从来都没有用,但它肯定没有更高级别的类约束或(我觉得非常有趣的)基于接口的约束强大。

14.3.3 接口约束

​ 一般来说,更灵活的做法是只接受实现特定接口的类作为类型参数,而不是将一个泛型类约束为一个给定的类。这样就可以在泛型的实例上调用接口。在 C# 语言中,将接口约束用于泛型也很常见。让我先展示给你一个示例(来自IntfConstraint示例)。首先,我们需要声明一个接口:

typeIGetValue = interface['{60700EC4-2CDA-4CD1-A1A2-07973D9D2444}']function GetValue: Integer;procedure SetValue(Value: Integer);property Value: Integer read GetValue write SetValue;end;

​ 接下来,我们可以定义一个实现它的类:

typeTGetValue = class(TNoRefCountObject, IGetValue)privateFValue: Integer;publicconstructor Create(Value: Integer = 0);function GetValue: Integer;procedure SetValue(Value: Integer);end;

​ 在限制为实现特定接口的类型的泛型类的定义中,事情开始变得有趣:

typeTInftClass<T: IGetValue> = classprivateFVal1, FVal2: T; // Or IGetValuepublicprocedure Set1(Val: T);procedure Set2(Val: T);function GetMin: Integer;function GetAverage: Integer;procedure IncreaseByTen;end;

​ 请注意,在这个类的泛型方法的代码中,我们可以编写:

function TInftClass<T>.GetMin: Integer;
beginResult := Min(FVal1.GetValue, FVal2.GetValue);
end;procedure TInftClass<T>.IncreaseByTen;
beginFVal1.SetValue(FVal1.GetValue + 10);FVal2.Value := FVal2.Value + 10;
end;

​ 有了所有这些定义,我们现在可以按以下方式使用泛型类:

procedure TFormIntfConstraint.BtnValueClick(Sender: TObject);
varIClass: TInftClass<TGetValue>;
beginIClass := TInftClass<TGetValue>.Create;tryIClass.Set1(TGetValue.Create(5));IClass.Set2(TGetValue.Create(25));Show('Average: ' + IntToStr(IClass.GetAverage));IClass.IncreaseByTen;Show('Min: ' + IntToStr(IClass.GetMin));finallyIClass.FVal1.Free;IClass.FVal2.Free;IClass.Free;end;
end;

​ 为了展示这个泛型类的灵活性,我为接口创建了另一个完全不同的实现方法:

type
TButtonValue = class(TButton, IGetValue)
publicfunction GetValue: Integer;procedure SetValue(Value: Integer);class function MakeTButtonValue(Owner: TComponent; Parent: TWinControl): TButtonValue;
end;function TButtonValue.GetValue: Integer;
beginResult := Left; // use base class property
end;procedure TButtonValue.SetValue(Value: Integer);
beginLeft := Value; // use base class property
end;

​ 该类函数(此处未显示)在父控件中创建了一个随机位置的按钮。位置创建一个按钮,并在以下示例代码中使用:

procedure TFormIntfConstraint.BtnValueButtonClick(Sender: TObject);
varIClass: TInftClass<TButtonValue>;
beginIClass := TInftClass<TButtonValue>.Create;tryIClass.Set1(TButtonValue.MakeTButtonValue(Self, ScrollBox1));IClass.Set2(TButtonValue.MakeTButtonValue(Self, ScrollBox1));Show('Average: ' + IntToStr(IClass.GetAverage));Show('Min: ' + IntToStr(IClass.GetMin));IClass.IncreaseByTen;Show('New Average: ' + IntToStr(IClass.GetAverage));finallyIClass.Free;end;
end;
http://www.qdjiajiao.com/news/9623.html

相关文章:

  • 网站的登陆注册页面怎么做seo职位招聘
  • 温州网站建设专业的公司百度推广怎么收费的
  • 做正版电子书下载网站网络营销的常用方法
  • 群晖 做网站 Java郑州网站网页设计
  • 学校网站建设维护百度关键词优化工具
  • 开化网站建设国内新闻最新消息今天简短
  • 公司要招个做网站的人企业网站优化外包
  • 怎么做免费的产品图片网站定制网站和模板建站
  • 怎么样做网站爬虫关键词排名优化技巧
  • 做app做网站从何学起搜索引擎优化服务公司哪家好
  • 让路由器做网站服务器企业网站的搜索引擎推广与优化
  • 1688成品网站源码windows优化大师值得买吗
  • 陕西网站开发联系电话百度大数据官网入口
  • 织梦怎么在本地编辑多个网站查权重
  • 国外哪些网站可以兼职做任务网络推广营销培训机构
  • 昆山网站制作哪家强找公司做网站多少钱
  • 网站管理cms网站快速优化排名排名
  • 甘肃搜索引擎网络优化seo网络优化师招聘
  • ftp如何上传网站深圳网站设计公司排行
  • 个人网站备案网址武汉seo系统
  • wordpress限制用户权限北京seo的排名优化
  • 石家庄市建设局网站上海seo优化服务公司
  • seo外包服务优化合肥网站关键词优化公司
  • 南通的网站建设网上怎么推销自己的产品
  • 香港网站建设展览关键词热度查询
  • project 网站开发计划婚恋网站排名前三
  • 学校网站建设源代码seo优化专员
  • 兰州市城市建设设计院网站优化大师客服电话
  • 购物网站有哪些平台网站设计公司模板
  • 网站注册了域名然后怎么做兰州正规seo整站优化