友类的一个用处!友类的意思就是在同一个Unit中申明的多个不同的类之间的互称!早就知道友类的概念,但一直没有体会到Delphi中到底创建这个概念有什么“利益”,直到最近和朋友在讨论另外一个问题时候才突然体会到其好处,拿来与大家分享,顺便征集其他关于友类的作用......假设存在类TFriend,如下:TFriend=class //为了举例,这个类并无任何意义
private
FSomeProp:String;
protected
property SomeProp;Read FSomeProp Write FSomeProp;
end;同时假设这个类申明在Unit1单元,那么当我们需要在工程中的另外一个单元Unit2中的某个类中访问类实例Friend1的保护属性的时候,我们该如何做呢?很简单,在Unit2中申明一个类TFriend的子类,如下:TPal=class(TFriend)
//没有任何数据
end;这样TPal类和需要在其中访问属性SomeProp的类在Unit2单元中互相为友类,这样你就可以直接在Unit2单元中的这个类中访问你需要访问的保护属性了!!!!不知道除了这个用途是否还有其他用途!!!!????关注........
private
FSomeProp:String;
protected
property SomeProp;Read FSomeProp Write FSomeProp;
end;同时假设这个类申明在Unit1单元,那么当我们需要在工程中的另外一个单元Unit2中的某个类中访问类实例Friend1的保护属性的时候,我们该如何做呢?很简单,在Unit2中申明一个类TFriend的子类,如下:TPal=class(TFriend)
//没有任何数据
end;这样TPal类和需要在其中访问属性SomeProp的类在Unit2单元中互相为友类,这样你就可以直接在Unit2单元中的这个类中访问你需要访问的保护属性了!!!!不知道除了这个用途是否还有其他用途!!!!????关注........
12049197( qxj游民) 15:48:13
DELPHI中如何实现友元类.
12049197( qxj游民) 15:49:22
有没有人在
284249(butfly) 15:54:03
什么叫友元类
XXXXXXX(⊙○⊙) 15:54:34
呵呵,Delphi中的私有函数就是友元函数
284249(butfly) 15:54:52
靠,还是不懂
15294130(独心) 15:54:53
delphi 里好像不能
284249(butfly) 15:55:16
小伍,你老婆怎么没有加我来
12049197( qxj游民) 15:55:41
友元类.
其它的类可以访问他的私有属性
284249(butfly) 15:55:57
小小老大在不在
XXXXXXX(⊙○⊙) 15:56:07
type Ta=class
private procedure foo();
end;
type Tb=class
public procedure foo();
end
procedure ta.foo();
begin writeln('Ta.foo() called'); end;procedure tb.foo();
var a:ta;begin a:=ta.create;a.foo();end;284249(butfly) 15:56:25
不看了,88
XXXXXXX(⊙○⊙) 15:56:33
友元类不是qxj游民说的那样,那样的属性,字段,方法是保护的(protected)
XXXXXXX(⊙○⊙) 15:56:57
protected的成员只能够在该类派生出的新类和该类中访问.
XXXXXXX(⊙○⊙) 15:57:24
而友元类是只一个成员,只有该文件中的其他类和方法可以访问的成员
XXXXXXX(⊙○⊙) 15:57:53
不多说了,看电影去了.连续不停看了13集<九五至尊>,看毛了,睡觉去88
15294130(独心) 15:57:56
眼镜 在 c++中 是老大说的概念
XXXXXXX(⊙○⊙) 15:58:07
??
12049197( qxj游民) 15:58:27
小眼镜,我给你说糊了,你说的是C++中的吗?
XXXXXXX(⊙○⊙) 15:58:34
我说的是delphi的
15294130(独心) 15:58:50
:)
12049197( qxj游民) 15:59:16
不是说他只能通过在在同一个单元中申明和实现
XXXXXXX(⊙○⊙) 15:59:16
C++中差不多.
XXXXXXX(⊙○⊙) 15:59:34
那就是private,呵呵,你不相信可以去坐试验.用我刚才写的代码
15294130(独心) 15:59:44
QXJ Delphi 好像抛弃了这种用法
12049197( qxj游民) 15:59:55
对了,FS也有一个贴子,我贴出来
12049197( qxj游民) 16:00:05
http://expert.csdn.net/Expert/topic/1851/1851400.xml?temp=.4960291
XXXXXXX(⊙○⊙) 16:00:12
procedure tb.foo();
var a:ta;begin a:=ta.create;a.foo();end;
这里.tb的foo方法中调用了ta的私有函数,不仅没有编译出错,还可以正常运行,呵呵,跟友元方法差不多
15294130(独心) 16:00:28
只能调用 本身提供的函数 才能访问
XXXXXXX(⊙○⊙) 16:00:35
??