DBe*_*nko 1 delphi types parameter-passing delphi-xe2
文档定义System.Types.TByteDynArray为:
type TByteDynArray = array of Byte;
如果我创建一个这样的例程:
procedure DoSomething(args: array of Byte);
begin
end;
并调用例程,没有编译错误:
DoSomething([1, 2, 3]);
但是,如果我将例程所采用的类型更改为:
procedure DoSomething(args: TByteDynArray);
以相同方式调用函数会产生此编译错误:
[DCC Error] E2010 Incompatible types: 'TByteDynArray' and 'Set'
为什么不array of Byte和TByteDynArray平等对待,显然它们应该是?我的代码库大量引用TByteDynArray,我想用这个方便的简写来代替创建这样的数组TByteDynArray.Create(1, 2, 3).
即使语法看起来相同,你在这里处理两件事.
一种称为动态数组类型:type TByteDynArray = array of Byte;另一种是开放数组参数procedure DoSomething(args: array of Byte);
Open数组参数允许将任何给定类型的数组传递给过程,包括动态数组.
但是当你声明procedure DoSomething(args: TByteDynArray);你只能传递TByteDynArray变量时.
[1, 2, 3] 是静态数组,它与动态数组不兼容.
分配后会抛出相同的错误
var
  a: TByteDynArray;
a := [1, 2, 3];
在Delphi []中也用于声明集,因此编译器认为您正在尝试将set分配给动态数组.
var
  s: set of byte;
  s := [1, 2, 3];
| 归档时间: | 
 | 
| 查看次数: | 719 次 | 
| 最近记录: |