接口和类是什么的关系 (100分)

  • 主题发起人 主题发起人 zymnm
  • 开始时间 开始时间
Z

zymnm

Unregistered / Unconfirmed
GUEST, unregistred user!
imyinterface,tmyclass是前面定义过的
myinterface:imyinterface;
myclass:tmyclass
begin
myclass:=tmyclass.create;
myinterface:=myclass <----是什么意思?
 
将tmyclass的对象myclass的接口(imyinterface)传递给myinterface
其中 tmyclass 定义为tmyclass=class(tclass,imyinterface)
 
参看下面的代码
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
ee: TCustomEdit;
// TCustomEdit 是TEdit的父类
end;

var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
ee:= edit1;
caption:= ee.Text;
end;

end.
 
myinterface:=myclass 是實現接口
還可以寫成 myinterface:=tmyclass.create
接口等于方法和屬性的"說明書"﹐但并沒有實現.具體實現的是類。一個接口可以有不同
的實現類。
舉一個例子,比喻手機的說明書﹐由于同一廠的手機的操作方法一般都大同小異
所以有些廠家為了省錢就不管什么型號都是同一本說明書.這里的說明書就是COM
不同的手機是實現類,廠家是為了省錢﹐COM是為了系統性
其實這是COM的精華所在,看以下的定義
imyinterface = interface(IUnknown)
['{4E3F7CEA-9317-46A1-99F2-6E5CB9F9867A}']
function getname():string;
stdcall;
end;
Tmyclass=class(TInterfacedObject, imyinterface)
public
function getname():string;stdcall;
end;
Tyouclass=class(TInterfacedObject, imyinterface)
public
function getname():string;stdcall;
end;
然后
可以這樣調用 myinterface:=Tmyclass.create;
也可以這樣調用 myinterface:=Tyouclass.create;
就是接口可以得到 調用的統一性﹐實現的可變性


 
接口类似于抽象类,声明了函数而没有函数的实体,在对象中实现接口,声明接口中类的
函数实体。。(Java中我的理解)
 
可不可以这样理解"类","接口","COM",在手机领域类,有不同的手机厂家,某个厂家的手机
生产的手机在操作上差不多,所以可以为同一个厂家定一个说明书("接口"),那么此时"COM"
,担什么角色?接口和多态之间又有什么区别?
 
而且我觉得不应该是类实现接口,而是某个对象来实现接口
 
在COM中是通过接口来调用类的,在接口中只有方法的声明,而没有实现过程,具体的实现
是在类中通过创建实例来实现的,所以对于同一个接口的不同类来说,同一个方法可能有
不同的实现方式。
 
类","接口","COM",在手机领域类,有不同的手机厂家,某个厂家的手机
生产的手机在操作上差不多,所以可以为同一个厂家定一个说明书("接口"),那么此时"COM"
,担什么角色?接口和多态之间又有什么区别?com就是整个手机.
 
多人接受答案了。
 
后退
顶部