关于类中属性和变量的关系:请高手指教(50分)

  • 主题发起人 主题发起人 npuwsz
  • 开始时间 开始时间
N

npuwsz

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟最近学delphi遇到一个问题,恳请各位大虾指教:
先看下面的类定义,
TSomeClass = class(TObject)
private
FSomeField: Integer;
protected
function GetSomeField: Integer;
procedure SetSomeField( Value: Integer);
public
property SomeField: Integer read GetSomeField write SetSomeField;
end;
FsomeField是类TSomeClass中的一个变量,而SomeField是一个属性,我的问题是:属性和变量有什么关系?在什么场合要用到属性,什么场合用到变量,GetSomeField 和SetSomeField读写的是SomeField还是FsomeField?
因为我对这一块不是很熟悉,问题可能有些遗漏?希望各位大虾能尽可能的讲清楚。
 
类变量是一般是private,外部不能访问,可以通过属性访问,但属性还可以通过Get/Set
作变量无法完成的工作。属性本生不存贮值,是通过变量实现。
GetSomeField 和SetSomeField读写的是FsomeField?
 
控件的属性理论上不允许直接访问,
只通过类变量来间接访问...........
 
Nstar说的"直接访问"不一定,delphi vcl 源程序就有直接访问属性。
 
属性是控件对外发部的接口,变量是控件实际运行时属性存取数据的
地方。可以认为属性只是一个抽象的便于访问的名称吧,在程序编辑状态,
我们通过属性来访问控件,但在运行状态,这个所谓的“属性”的名称在
内存中是不存在的,那么属性到哪儿去存取呢?就是到属性所关联的那个
变量所在的地方去存取。
你注意看一下你在类中的定义,FsomeField 定义为 private 所以它只
能在类本身内访问。而属性someFiel 却可以在外部访问。其实很多时候属
性也可以通过在类内定义一个 public 变量来代替,这样就不用在类内为
属性定义一个后台的变量(如你的FsomeField)来做替身了。但用属性来
定义的好处是它可以在编辑状态在属性编辑框内存取,而public 变量不能。
不知道这样的解释清楚了吗?
 
请教!
//我也是看一些资料的..
 
能不能给出一个通过读写属性得到变量的值的例子
不知道我的如下推理政不正确:设somevalue 是integer类型。
somevalue:=somefield//调用GetSomeField取得fsomefield
somefield:=somevalue//调用setSomeField给fsomefield赋值,但setSomeField中的value
参数是怎么传递的呢?
 
写的不是很明白,定义的很不规范,是不是哪儿摘抄的?关注
 
blueboy的解释比较细致了,最好看一些示例,看它如何实现的。
 
我的意思是如果要在其他单元给someFiel赋值,delphi是不是调用了setSomeField,
如果是调用了,setSomeField里的value参数又是从哪获得实参呢?
 
procedure TSomeClass.setSomeField(inVal:integer);
begin
FSomeField := inVal;
end;

inVal参数是由vcl控件系统从程序中传给它的“属性”值传给etSomeField.
 
多人接受答案了。
 
后退
顶部