关于类方法(100分)

  • 主题发起人 主题发起人 swordman
  • 开始时间 开始时间
S

swordman

Unregistered / Unconfirmed
GUEST, unregistred user!
1)
type
op=class
class procedure test1

procedure test2
end


2)
unit Unit1

interface

class procedure test3

procedure test4

implementation
procedure test3;
begin
...
end

end.
问题
1.请问test1,test2,test3,test3在用法和概念上有什么不同.
test1,test3有什么特殊的用途,特别是test1

2.而且我发现在
procedure test3;
begin
...
end

中test3的procedure前加上class(即
class procedure test3
begin
...
end

会产生错误)
 
问题
1.请问test1,test2,test3,test3在用法和概念上有什么不同.
test1,test3有什么特殊的用途,特别是test1

---test1是类OP的方法, 可以这么调用 OP.TEST1
---test2是OP对象调用的方法(还得考虑它的可见性问题, 没有任何修饰字,
照你这个,是可以的)
用法:(伪码)
var
op11: op;
begin
op11 := OP.Create;
op11.test2;
end;
----test3定义的不对
----test4是普通过程

2.而且我发现在
procedure test3;
begin
...
end

中test3的procedure前加上class(即
class procedure test3
begin
...
end

会产生错误)

---上面说过你定义的地方不对,类方法应该属于某一个类
当然你定义TEST3编译器可能不会报错.

但正如你说的, 实现部分加上CLASS就不对了.
 
例如
type
op=class
class procedure ji
end;
使用时
op.ji 可以直接调用类的方法,这是对象方法所不能做的

如果
var f:op;
f:=op.create
f.ji 这样调用ji是否发生错误,因为ji现在是类方法,而用调用对象方法的方法来调用它。
其实这是允许的.
所以调用类方法时,我们可以有两种做法

1)op.ji直接调用
2)var f:op;
f:=op.create
f.ji建立对象后调用


又有一种情况
unit Unit1;

interface
class procedure hu;
implementation
procedure hu;
begin
....
end;
end.

就是说类方法不定义在类里,是否发生错误?
1.首先这种定义是不对的(但delphi不会说你错)
2.类方法应该定义在类里面
3.当我们把
procedure hu;
begin
....
end;
改为
class procedure hu;
begin
....
end;
将会发生错误

这就很明显说明在这里delphi只把procedure 当作普通的procedure来处理,所以一旦你加上class证明你想把它当作类方法处理,这样delphi就会说你错
 
好了,
发分吧
 
方法定义前面加上CLASS标识符该方法就是类方法,这与VC++中的静态方法(即在方法
前面加上STATIC标识符)该方法与具体的类实例无关,在定义时万不可与具体的类实例信息
有关,只与类本生有关。
 
马上就过年了
发分吧:)

 
补充上面的内容:类方法可以在不创建类实例的情况下调用。
 
快发分呀,记得分点给我。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
896
SUNSTONE的Delphi笔记
S
S
回复
0
查看
873
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
后退
顶部