我有一个类,TiffData包含加载和显示数据的抽象方法,以及一些定义这些方法的TTiffByte,TTiffAscii,TTiffShort等祖先类.
我还有一个常量数组或记录,可以让我根据IFD中记录的数据类型查找有关类型的信息.
我无法弄清楚,如何为每个数组元素存储关联的类.
type TtiffType = record name : string; bytes : word; data : class; { ? } desc : string; end; const TiffTypes : array[ 1 .. 18 ] of TTiffType = ( {01} ( name: 'byte'; bytes : 1; data: TTiffByte; { ? } desc: '8-bit unsigned number.' ),{02} ( name: 'ascii'; bytes : 1; data: TTiffAscii; { ? } desc: '8 bit byte that contains a 7 bit ASCII code; the last byte must be NULL (binary zero)' ),{03} ( name: 'short'; bytes : 2; data: TTiffShort; { ? } desc: '16-bit (2-byte) unsigned integer.' ),...
我想要做的是在数组中保持对类的引用:
value := TiffTypes[ fldType ].Data.Create; value.loadFromOffset( offset ); Edit1.Text := value.getShortString;
或者在数组中保存一个构造函数:
value := TiffTypes[ fldType ].data; value.loadFromFile( f,offset,count ); InternalRepresentation := TTiffAscii( value.storage );
解决方法
由于您的类具有公共基类TiffData,因此您可以在记录中使用TiffData类,例如:
type TtiffType = record name : string; bytes : word; data : class of TiffData; // <-- here desc : string; end;
然后使用Data.Create将按预期工作,只要TiffData的构造函数声明为virtual,并且每个派生类都会覆盖它.