请问一下type定义有何不同? ( 积分: 50 )

  • 主题发起人 主题发起人 awfigsk
  • 开始时间 开始时间
A

awfigsk

Unregistered / Unconfirmed
GUEST, unregistred user!
1、
type
HWND=type LongWord;

我在书上看到解释是:HWND与LongWord有何不同呀?定义这个类型有什么用?不直接使用LongWord就可以了吗?

2、
type
LongLong=Int64;
这里LONGLONG与Int64是相同的吗?
 
1、
type
HWND=type LongWord;

我在书上看到解释是:HWND与LongWord有何不同呀?定义这个类型有什么用?不直接使用LongWord就可以了吗?

2、
type
LongLong=Int64;
这里LONGLONG与Int64是相同的吗?
 
HWND和LongWord所表达的数据是一样的。
之所以定义HWND,我认为是为了SDK程序员保留以前的编程习惯。并且将某一变量定义为HWND类型,其一目了然是一窗口句柄。
 
楼主问的是,前面加不加type有什么不同。
Marco_Polo的回答。。。

不加type定义,仅仅是给类型起个别名。
加上type之后,是定义了另一种“不同”的类型,虽然他们“实质上”是一样的。
 
1、
type
HWND=type LongWord;

其实就是将HWND定义成LongWord,也可以说是LongWord的别名,
 
to 暗月:
“不加type定义,仅仅是给类型起个别名。
加上type之后,是定义了另一种“不同”的类型,虽然他们“实质上”是一样的。 ”
大侠,能详细解说一下吗?即然是"不同"的类型,但"实质上"是一样?那这样定义有什么用?有何不同?
 
再比如说:

type
TCaption = type string;
TFileName = string;

delphi的帮助中指出:以type修饰的类型定义对编译器来说是定义了一种新的数据类型,如TCaption,而TFileName则只是给string定义一个别名,它们是相同的数据类型。
如果单纯从pascal语法角度来看,TCaption 和string应该是不兼容的两数据类型,但是由于Delphi对Pascal语法的扩充,使其更加灵活,一些原先的pascal的语法限制使去掉了。
所也可以理解为这其中的string, TCaption, TFileName这三种类型是一样的,TCaption继承自string,对string适用的任意操作均可用于TCaption类型。

 
to lzh7735大侠,您所写的"TCaption继承自string,对string适用的任意操作均可用于TCaption类型",那能不能这样理解,TCaption也是String类型?但二者在什么时候会不同呢?可以将TCaption类型的变量与String类型的变量相互赋值吗?
 
可以相互赋值的
 
晕呀!
有何不同呀?
 
有没有看过<<Delphi 5 开发人员指南>>

里面是这样介绍的
type
MyInteger = Integer;

新定义的类型别名跟它的源类型在任何时候都兼容的,这样在凡是出现Integer的地方都能用MyInteger 来替换.

如果要创建一个被编译器认为是独特的、全新的类型别名,就要用到Type关键字了
type
MyInteger = type Integer;
这样,当MyInteger 用于赋值目的时,它就自动转换为Integer,但在用作 Var 和 Out 参数时,它就和Integer 是不兼容的,因此下面的代码是正确的

var
GMyInteger : MyInteger;
AInteger : Integer;
begin
AInteger := 1;
GMyInteger := AInteger;
end;

但是下面的代码就是不正确的
procedure Gooood(var Value : Integer);
begin
// 一些代码
end;

var
GMyInteger : MyInteger;
begin
GMyInteger := 100;
Gooood(GMyInteger)
// 编译出错, GMyInteger 不是 Integer 类型

...........
 
to gooodlife大侠:哦,在赋值时还是将整数赋给新类型的变量,但是在用var,out传递参数时,则只能新类型定义的变量传递,也就是您上面所写的例子,如将Goood(var Value : Integer)改为Goood(var Value:MyInteger)程序就正常了!是这样吗?
 
不行吗?
这样就是对的了
 
后退
顶部