一个菜鸟关于类定义的初级问题?(50分)

  • 主题发起人 主题发起人 tuer
  • 开始时间 开始时间
T

tuer

Unregistered / Unconfirmed
GUEST, unregistred user!
书上说类定义的域都由四个指示字所包含,以确定数据的私有和提供接口等,普通格式如下:
type
T类名 = class(祖先类名)
private
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
end;

我观察一个最简单的form的unit源码时,在form加入一个Button控件,delphi自动生成如下:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
...
我理解unit的type是在定义一个form类吧,那么
Button1: TButton;
procedure Button1Click(Sender: TObject);
这两句没有放在任何一个指示字里,那它们属于什么呢?
还有,如果这是一个完整的类定义,Button的单击过程代码为什么要放在implementation
后面,而不是在类定义中呢?

我才开始学,没有多少面向对象的基础,望高手指点!
 
Button1: TButton;
procedure Button1Click(Sender: TObject);
是Form1类的成员和方法
 
缺省状态下,delphi 设置{$M-} 所以:
--》没有放在任何一个指示字里,那它们属于
相当于 public
--》Button的单击过程代码为什么要放在implementation
implementation的意思是“实现”
interface是“接口”,先放个头部说明,再在下面实现
具体的操作代码。
这些属于delphi的语法内容,建议你买一本delphi语法书,
不然没有办法学语言的。

 
1: 它们属于默认,(咦!书里好象没说过呀),我觉得是private
2:procedure Button1Click(Sender: TObject);
是Form1类的方法,当然要在implementation实现,再者说了,你见过谁在类声明中
写实现代码吗?不管是不是Form1类的方法都要在implementation实现。
 
呀!居然是public,嘻!又上一课,大富翁好啊!
 
能用通俗的概念解释一下private、protected、public、published这四个东东吗?拜托,
需要通俗直接的解释,书上的说明看得半懂不懂的,我现在大概明白“published”好象就
是控件的属性接口,不知对不对,我需要就是象这样的一种概念,那位高手可以说说?
 
楼上stlont说的对,没有用限制定义的时候是默认的,是public
至于Button的Click事件,定义肯定是在类中,implementation中是实现的具体内容。
 
能用通俗的概念解释一下private、protected、public、published这四个东东吗?拜托,
需要通俗直接的解释,书上的说明看得半懂不懂的,我现在大概明白“published”好象就
是控件的属性接口,不知对不对,我需要就是象这样的一种概念,那位高手可以说说?
 
你对published的理解基本没错。
可以这样说:
private、protected都是内部的,但protected在派生类中可见,
public、published都是公开的,published的可以在IDE的对象
编辑器中修改设计期的数值。
如果一本书你看了一时没法理解,要多看一些其他的书,交叉
融合,或者先放放,编程使用一段时间后再来看看,也许就会
豁然开朗了。
要有一种完全理解的感觉,就象你闭上眼睛,觉的你好象进入
了电脑内部,手指触摸着一串串的0和1,或者是触摸着那些
凹凸不平的语法定义,感到无比熟悉,融为一体。
 
我也是初学
 
to:stlont
高手,还是不太懂啊...
特别是private,只知道是私有的数据域,无法跟现实的控件对象联系起来想啊?
 
1 表示由IDE添加的,默认 Access
2 在类中已经声明,implementation 也是定义的一部分。只有声明和实现之分。
 
Private 该类型的成员只能在声明类中被访问
也就是说,Private类型的成员是通过一个Public类的方法来访问它
这样的设置使得类的一些成员被隐含起来,用户只能用一些专门的方法来使用它们.
建议看一下“数据的封装”
 
属于运行期变量
published
 
Button1: TButton;
procedure Button1Click(Sender: TObject);
这两句没有放在任何一个指示字里,那它们属于什么呢?
前面几个家伙说得不对,Form1.说得对。

它们属于published
 
又连续看了几天书,现在理解 private 好象就是类应具有的各种“状态”,比如
此类具有名字状态,大小状态,类具有附件(如添加了button)等等,而published
就是制造一个个叫“属性”的接口来供用户来设置或修改这些“状态”的表现值,
public定义一个个过程(叫做方法)使类或类的附件具备某种操作功能,等待用户
的调用...
我理解的对不对啊,请高手指点一下呀!

又to:form1.和 wr960204
Button1: TButton;
procedure Button1Click(Sender: TObject);
怎么是属于published呢
不明白啊?...
 
当然是Published要不然你哪能在设计期间看得到他呢
 

在设计期直接使用,是在published中,你可以放上一个button2,点击其OnClick事件的下拉菜单,是不是能看到Button1Click?
 
在这里的
Button1: TButton;
procedure Button1Click(Sender: TObject);
是published, 但并不代表没有放在任何一个指示字里
的都是published, 是public还是published是有条件的,
请都回头看我的第一个回贴。
button所以是published, 包括设计期的控件都是,
,是因为他们是从TPersistent继承下来的,而TPersistent
正好是在{$M+}的条件下编译的,所以他的后代都是published。
如果你自定义了个函数或过程,没有放在任何一个指示字里,
没有从带{$M+}的类继承下来,那么他是public的。
讨论问题最好能够说原因,不要光说结果,不然越搞越糊涂。
当然我回帖时没有具体看楼主说的是button, 也有疏忽。

 
其实要理解最好的办法就是将类成员分成5个部分:
private
protected
public
published和
components。

因为components部分和public与published还是有很大区别的:
components部分允许出现属性, 类,接口和方法, 不允许出现简单变量。
public部分允许出现属性,类,接口, 方法和简单变量。
published部分允许出现属性,类,接口而不允许有方法与简单变量。

private, protected, public的用途大家都已经知道了。
published一般都用来放置供IDE使用的属性。
components一般都用来放置IDE生成的组件和事件方法。
这就是它们的主要用途了。

public, published, components部分都是全局可见的。
 

Similar threads

S
回复
0
查看
730
SUNSTONE的Delphi笔记
S
S
回复
0
查看
738
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部