我正在将遗留的 Delphi 应用程序迁移到 Delphi-XE2,我想知道是否有充分的理由替换定义为的数组Array of MyType
to TArray<MyType>
。所以问题是有什么优点和缺点TArray<T>
用法而不是 MyType 数组?
主要优点是类型身份规则不那么繁琐。考虑:
a: array of Integer;
b: array of Integer;
这两个变量不兼容赋值。写成这样是编译器错误:
a := b;
另一方面,如果您使用通用语法:
a: TArray<Integer>;
b: TArray<Integer>;
那么这两个变量是赋值兼容的。
当然,你可以写
type
TIntegerArray = array of Integer;
但各方需要就同一类型达成一致。如果所有代码都在您的控制之下,那很好,但是当使用来自各种来源的代码时,通用动态数组的出现会产生巨大的差异。
同样,我想到的另一个优点是您可以轻松地使用泛型数组类型作为泛型方法的返回类型。
如果没有通用数组,您就必须声明以下形式的类型:
TArrayOfT = array of T
在你的通用类中,这相当混乱。如果您在非泛型类中编写泛型方法,则无法进行该声明。通用数组再次解决了这个问题。
TMyClass = class
class function Foo<T>: TArray<T>; static;
end;
这一切都遵循类型兼容性规则中描述的文档 http://docwiki.embarcadero.com/RADStudio/XE3/en/Overloads_and_Type_Compatibility_in_Generics像这样:
类型兼容性
两个非实例化泛型被视为赋值
仅当它们相同或是别名时才兼容
普通型。
两个实例化泛型被视为赋值
如果基本类型相同(或者是某个类型的别名),则兼容
普通类型)和类型参数是相同的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)