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

做软件测试的网站友情链接交换标准

做软件测试的网站,友情链接交换标准,网站建设业务,湖北网站建设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.15wanjia.com/news/56208.html

相关文章:

  • 动态网站制作素材设计培训班学费一般多少
  • 做软件与做网站建设有什么区别百度优化培训
  • 公安网站备案流程公司网址
  • 大连网站建设仟亿科技如何有效的推广宣传
  • 街道政府网站建设管理工作总结重庆人力资源和社会保障网官网
  • 河南省住建厅官网百度seo优化规则
  • 做类似淘宝一样的网站有哪些友情链接代码美化
  • 100个最好的微信小程序免费优化网站
  • 有哪些网站是cmssem搜索
  • 嘉兴做微网站多少钱营销外包公司
  • 如何用asp做网站百度竞价推广思路
  • 商丘整站优化昆明百度关键词优化
  • 做的网站如何投入搜索引擎优网营销
  • 在别的公司做的网站可以转走吗百度推广服务费3000元
  • 做网站 超速云百度关键词优化送网站
  • 苏州建设造价信息网站免费seo网站诊断
  • 营销技巧在线播放北京seo优化服务
  • b2b2c网站爱站网关键词挖掘工具熊猫
  • 临沂市罗庄区住房和建设局网站社群营销成功案例
  • wordpress建站详细教程网络推广方式有哪些
  • 网站无后台添加后台国内最新新闻大事
  • 图片设计网站有哪些网站推广苏州
  • 郴州网站seo网络舆情监测
  • 无锡网站建设专业极速信息微信公众号推广2元一个
  • 做网站的都是直男癌吗应用商店关键词优化
  • 如何创建微信小程序商城seo的优化方案
  • 设计师个人作品集网站seo快速排名软件app
  • 常山做网站怎么把网站排名优化
  • 人力外包和项目外包哪个好百度优化
  • 网站建设推广费用全网霸屏推广系统