友类的一个用处!友类的意思就是在同一个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单元中的这个类中访问你需要访问的保护属性了!!!!不知道除了这个用途是否还有其他用途!!!!????关注........

解决方案 »

  1.   

    日~~到分阿
    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 
    ??