代码之家  ›  专栏  ›  技术社区  ›  James

Delphi2010-为什么我不能用泛型类型参数声明抽象方法?

  •  3
  • James  · 技术社区  · 15 年前

    在Delphi 2010中,我尝试执行以下操作:

    TDataConverter = class abstract
    public
        function Convert<T>(const AData: T): string; virtual; abstract;
    end;
    

    但是,我不断收到以下编译器错误:

    E2533 Virtual, dynamic and message methods cannot have type parameters

    我不太明白为什么我不能这样做。我可以用C#e.g。

    public abstract class DataConverter
    {
        public abstract string Convert<T>(T data);
    }
    

    有人知道这背后的原因吗?

    1 回复  |  直到 15 年前
        1
  •  7
  •   Mason Wheeler    15 年前

    您可以在.NET中这样做,因为Delphi和.NET处理泛型的方式不同。我知道的还不够详细。不过,我知道你为什么不能用德尔福。

    但如果创建泛型方法,每次在代码中调用它时,都会创建一个不同的代码副本,特定于该类型参数。这对于以不同的方式处理不同的类型是必要的(例如,如果传入一个接口或字符串,它必须处理引用计数。)但是不能为它们创建新的虚拟方法和新的VMT插槽,因为DCU已经创建并 can't be changed now .