如何在Delphi中声明自定义类型?
我想声明一个自定义数据类型,以提高代码的可读性。其目的是保持该类型清洁,不受其他Ansistring的任何干扰。但德尔福似乎不支持它如何在Delphi中声明自定义类型?,delphi,types,Delphi,Types,我想声明一个自定义数据类型,以提高代码的可读性。其目的是保持该类型清洁,不受其他Ansistring的任何干扰。但德尔福似乎不支持它 type TKMLocaleCode = type AnsiString; ... snip ... procedure A; var A,B: TKMLocaleCode; C: AnsiString; begin A := 'eng'; //<<-- I expect an error here A := C; //&l
type
TKMLocaleCode = type AnsiString;
... snip ...
procedure A;
var
A,B: TKMLocaleCode;
C: AnsiString;
begin
A := 'eng'; //<<-- I expect an error here
A := C; //<<-- I expect an error here too
B := TKMLocaleCode('eng'); //<<-- I expect no error here
end;
类型
TKMLocaleCode=类型AnsiString;
... 剪
程序A;
变量
A、 B:TKMLocaleCode;
C:翻译;
开始
答:"eng";// 你不应该在你犯错误的地方犯错误,但是你最初的技术无论如何也不会实现你的目标。请注意,TFileName
与您的字符串类型一样是一种独特的字符串类型,但它可以在任何需要普通字符串的地方使用。type
声明更适合于为一个类型建立不同的RTTI,以便在设计时可用于不同类型的属性编辑器
要真正创建一个独特的类型,请尝试声明一个包含数据的字段的记录。记录与其他任何内容都不兼容,即使它们与其他类型具有相同的结构。要使您的记录与相同类型的其他值具有可比性,请通过在记录声明中提供Equal
和NotEqual
方法来重载比较运算符。要允许通过类型转换而不是通过普通赋值创建不同类型,请提供一个显式
运算符,而不是隐式
,您可以声明一个记录,然后使用运算符重载来提供希望支持的运算符:
type
TKMLocaleCode = record
strict private
FValue: AnsiString;
public
class operator Explicit(const Value: string): TKMLocaleCode;
end;
class operator TKMLocaleCode.Explicit(const Value: AnsiString): TKMLocaleCode;
begin
Result.FValue := Value;
end;
显然,您希望添加更多功能,但此记录满足问题中所述的要求。AnsiString的类型?我不认为这是一个有效的声明。@RobKennedy我以前从未见过类型的AnsiString
,但由于它编译时省略了比较,只是出于兴趣,它会是什么?调试器在分析。。。