delphi - Delphi 中构造函数约束的用例是什么?

标签 delphi generics parameterized-types

标题就差不多了...

为什么要使用构造函数约束?

class 约束清楚地暗示了这一点。

如果你单独使用它,你就不能用你创建的东西做任何事情。

为什么它会存在?

其他信息:

请注意,在添加“构造函数”约束之前,以下代码不会编译:

program Project3;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;


type
  TSomeClass<T: class> = class
    function GetType: T;
  end;


{ TSomeClass<T> }

function TSomeClass<T>.GetType: T;
begin
  Result := T.Create;
end;

begin
  try
    { TODO -oUser -cConsole Main : Insert code here }
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

最佳答案

Why would you ever want to use the constructor constraint?

It's clearly implied by the class constraint.

不,不是。构造函数约束要求该类型具有公共(public)的无参数构造函数 - 然后允许调用该构造函数。

并非所有类都有公共(public)无参数构造函数。

关于delphi - Delphi 中构造函数约束的用例是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13343890/

相关文章:

delphi - 使用默认值时,rtti 不调用所需的重载函数

algorithm - Delphi 图形的非递归深度优先搜索

java - getActualTypeArguments 与父级,从子级获取其参数化类型

java - 如何在没有类实例的情况下访问枚举类中的静态变量?

haskell - 如何为具有两个参数的类型实例 `Functor`?

java - 使用 Java 参数化类型和多态性实现这种通用编程场景的方法

delphi - 使用 delphi 按 Hue 和 Luminosity 对颜色(调色板)列表进行排序

delphi - TXMLDocument.Active := False causes FastMM4 errormessage "FastMM detected that a block has been modified after being freed"

java - 创建通用 HashMap 数组

c# - 将泛型类型的实例返回到在运行时解析的函数