问题: 属性与字段的区别?
|
来自: Johnny_du 时间: 2007-5-17 11:20:42 ID: 3717621 |
“属性;
“字段”一般是针对数据库库表或者视图来说的。比如说:“物资库存表”这个数据库库表具有“库存量”这个字段。
|
来自: vivi0108 时间: 2007-5-17 11:24:58 ID: 3717626 |
最好能写个类能有属性,方法,但就是没具体的例子,不怎么懂,你说的那个是针对不同的概念的,我就想字段delphi里类的区别。
|
来自: royal1442 时间: 2007-5-17 11:29:46 ID: 3717632 |
TMan = class(TObject)
private
FAge: Integer;//字段
FIsBoy: Boolean;//字段
procedure SetAge(const Value: Integer);//属性
end;
implementation
procedure TMan.SetAge(const Value: Integer);
begin
//在设置年龄的时候,要进行基本的取值范围的判断
if (Value > 0) and (Value < 250) and (FAge <> Value) then
FAge := Value;
end;
|
来自: Johnny_du 时间: 2007-5-17 11:41:35 ID: 3717637 |
:)
楼上的已经写了例子了。
其实,类的私有数据叫做“字段”似乎不是很恰当。
我个人认为叫做“类的数据存储域”或者仿照C++中的叫法“类的数据成员”可能更合适些...
|
来自: vivi0108 时间: 2007-5-17 12:03:57 ID: 3717665 |
还没看过书上有属性,那个声明不对吗?还有setage命名根据age来的?
|
来自: vivi0108 时间: 2007-5-17 12:05:45 ID: 3717667 |
区别难道在于private和public?
|
来自: Johnny_du 时间: 2007-5-17 12:22:42 ID: 3717679 |
呵呵:)看来楼主似乎对OOP还没有入门。
是这样的:
private关键字是说明在该部分声明的变量(如:FAge)或函数(如:SetAge)只有类自己才能够访问,而且同一类的不同实例也不能访问;
public关键字是说明在该部分声明的变量或函数,可以被大家共同访问。
还有一个关键字就是published,一般属性的部分。
royal1442大侠的例子没有错,他的例子是说类TMan的FAge数据成员是通过属性调用方法而改变类属性的接口定义。
|
来自: vivi0108 时间: 2007-5-17 12:39:03 ID: 3717689 |
是啊,刚学。
to johnny:你的那句“你可以不改变类的属性的访问限制”,不怎么明白,能不能解释下?
|
来自: Johnny_du 时间: 2007-5-17 14:59:22 ID: 3717766 |
就是说在royal1442所举的例子中你可以给TMan类实例的Age属性赋18到60之间值。
|
来自: vivi0108 时间: 2007-5-17 16:15:58 ID: 3717811 |
好象是给字段fage赋值啊,怎么给属性Age进行赋值的。这点正是OOP的优越性之一,就是你不能够对类的私有数据成员进行直接的访问,而只能够通过该属性面板上的,相当与label的caption,给age赋值就相当于调用setage方法给fage字段赋值,这样理解对吗?johnny大侠!
|
来自: Johnny_du 时间: 2007-5-18 16:54:56 ID: 3718473 |
对你说的没错,就是这样理解。
下面是我写的给你的一个示例类的代码,供你参考。
unit ClassExample;
interface
uses
SysUtils, Dialogs;
type
TSex = (Male,Female);
{***********************************************************************
这里声明一个THuman的类。这个类有三个属性,该属性。
而且该属性时,若FAge数据成员没有赋值,则
返回未赋值信息;
Age属性有一个写方法,且仅能够对该属性:该属性
property Age: Integer read FAge write SetAge; //只有写方法的属性
end;
implementation
constructor THuman.Create;
begin
inherited;
FAge := 20;
FSex := Male;
end;
function THuman.GetRace: String;
begin
if FRace = '' then
Result := 'Have no Race!'
else
Result := FRace;
end;
procedure THuman.SetRace(const aRace: String);
var
strTmp: String;
begin
strTmp := Trim(aRace);
if ((strTmp = 'Chinese') or (strTmp = 'USA')) then
FRace := strTmp
else
ShowMessage('Not a legal Race!');
end;
procedure THuman.SetAge(const anAge: Integer);
begin
if (anAge < 0) or (anAge > 150) then
begin
ShowMessage('Not a legal Age!');
Exit;
end;
end;
end.
|