当前位置:主页>销售管理软件> 列表

关于面向对象的一点疑问 找进销存数据库表

记账软件版1楼: 比如说, 我现在要设计一个类,从文本中得到信息。
但是我取到的信息在之后的程序中可能经常要用到,于是我就用一个全局变量去保存他,
但是这与面象对象的设计方法是有出入的(全局变量破坏封装)哪位高人指点一二?

2楼: 不需要做成全局变量
可以把需要的做成属性,就像控件一样
property a:integer read Fa write Seta;
你可以把它放在protected或者public
这样子类就可以用了 如进销存数据库表

3楼: TserverInfo = class(TObject)
private
FUserID:string;
FPWD:string;
function GetServerInfo:boolean;
published
UserID:string read FUserId ;
PWD:string read FPWD ;
end;

function TServerInfo.GetServerInfo:boolean;
var
ini:TiniFile ;
begin
try
//从文本中得到信息;
。。。
FUserID := GetUserID ;
FPWD := GetPWD ;
。。。
except
end;
end;

假设这是我设计的类,但我在实例化的时候还是要有一个类变量的,而这个类变量也要设计成全局变量我才能在其它地方引用UserID及PWD。。。

4楼: 实例化的时候还是要有一个类变量

需要一个全局的类变量(如果要在很多地方用到的)
如果只是在这个form上用的话,就可以设置成私有的了

5楼: 可是我觉得还应该有更好的解决方法,不用全局变量

6楼: 如果在很多地方要用到的话,总会有一个是全局的
不然怎么使用势力中的属性呢

记账软件版7楼: 这是不是跟设计模式中的单例类有什么关系呀?哪位仁兄知道的,是不是应该用单例类来设计

8楼: 1.
如果是我,如果这个类在很多窗体中要用到,
那么我会将此类作为窗体类的一个属性。
TTextInfo=class
.....
end;

TF_Base=class(TForm)
.....
private
FTextInfo:TTextInfo;
public
property TextInfo:TTextInfo read GetTextInfo write SetTextInfo;
end;

TF_SomeForm=class(TF_Base) //此类的实例也就可以用TextInfo属性对文本进行读取。
....
2.有时有很多通用的全局的函数和过程。
我会建立一个TGlobal类,把那些函数和过程都在此类中实现。
然后在祖先窗口中设一个此类的属性。
即使不在窗口中使用,而是其他类使用,也只要use TGlobal所在的单元,
临时创建一个TGlobal实例用一下,用完放掉。

9楼: 帮顶!

http://www.source520.com

站长开发推广同盟 站长朋友的终极驿站
同时拥有海量源码电子经典书籍下载

http://www.source520.com/search/search.asp

"编程.站长"论坛搜索引擎-----为中国站长注入动力!

10楼: 多人接受答案了。