关于什么是静态变量 (300分)

  • 主题发起人 主题发起人 Ale.
  • 开始时间 开始时间
什么意思呀??进来学习一下.

说明:不是灌水
 
他们走了,可能是中场休息。
 
TO:Ale.
说几句公道话,hygsxy前辈说的有理,如果你从前没有学过C++或者JAVA,
或者你学用C++或者JAVA时间不久,而学习Delphi仅仅六个月,那么你的水平...
嘿嘿,确实不敢恭维,人还是现实一点好!
申明:不必开帖数落我,只是说说我的想法而已!

 
我想了想,要达到你所谓的“静态变量”大约有 5、6 种方法,除开上面提到的 2 个,还
有内存映像、进程实例管理、间接存取等等。不过,在 Delphi 里请你注意:确实没有“静
态变量”这个名词的,这个名词之所以出现,是引申自 C++ 和 Java 的。其效果是生命期
与进程相同、数值等同于共享。根据这个效果,在 Delphi 里可以找到 n 多的办法来实现,
请看下例:

unit Static;
interface
type
TStaticValue=class
class function GetInt:LongInt;
class procedure SetInt(ValInt:LongInt);
end

implementation
var
StaticValue:LongInt=$8CA6BFF

class function TStaticValue.GetInt:LongInt;
asm
MOV EAX,StaticValue
end;
class procedure TStaticValue.SetInt(ValInt:LongInt);
asm
MOV [StaticValue],EDX
end;
end.

这是一个间接存取的模拟,可以如下调用:
uses Static;

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(IntToStr(TStaticValue.GetInt));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
TStaticValue.SetInt(1234);
end;

{$WARNINGS OFF}
procedure TForm1.Button3Click(Sender: TObject);
var
V:TStaticValue;
begin
V.SetInt(5678);
ShowMessage(IntToStr(V.GetInt));
end;

procedure TForm1.Button4Click(Sender: TObject);
var
Obj:TObject;
begin
TStaticValue(Obj).SetInt(6789);
ShowMessage(IntToStr(TStaticValue(Obj).GetInt));
end;
{$WARNINGS ON}

我没有时间去一个一个实现,但这些实现决不是你认为的需要很强的 Delphi 功力。
 
《看本贴后感》

累了



 
不知道是不是上下半场还是分节的...
搬板凳
 
空说无凭
建议设个技术比拼大擂台
手下见真章
有人支持的话建议另外发帖开始
尽快结束本贴无止境的争吵
 
TO:wlmmlw 你喜欢看NBA?
 
我看NBA可能只有十次左右。
但我喜欢热闹,无论什么形式的热闹。
KK2000你是篮球迷?
 
哇,又讨论回来了?
怎么不接着吵架了?
很久没有看到这么热闹的帖子了,我ding!
 
是的! 我是个篮球迷! 也喜欢打篮球。 我这里就是没有
伴一起玩球。
 
关于第一个问题,在delphi中从来就没有存在静态变量这样一个说法。

在delphi5开发人员指南中对此有论述:

在3 2位Delphi中常量的类型定义是与在1 6位Delphi中常量的类型定义不同的。在16位
的Delphi 1.0中,这种指定了类型的常量不是当作常量,而是被当作赋初值的变量或类型
常量(typed constant);然而,在Delphi 2.0以后指定了类型的常量才真正被当作是常量。
Delphi在Project菜单的Options对话框中的Compiler页上提供了向后兼容;或者可以用$J
编译开关来控制,缺省情况下,该开关是开的,向后兼容Delphi 1.0,但是最好不要用这
个方法,因为Object Pascal以后可能不再支持它。

大家可以去看delphi的帮助,正确的说法应该叫做typed constant(类型常量),而非
静态变量。静态变量如tseug所说的,是c/c++里面的概念,我想和typed constant应该还
是有所不同的,虽然他们很相似。

在delphi5及以前的版本中,默认$J编译开关是打开的,Delphi6我没注意,Delphi7是默
认关闭的。作为一个向后兼容的选择,我也认为如果不是必要的话,尽量不使用这个方法。
默认关闭这一点 已经能够说明问题。

又:我觉得很多人喜欢去看书,但是为什么不喜欢去看帮助或者是随机的文档呢?事实上
Delphi1.0 随机的PDF文档我一直看到3.0。因为在此期间我并没有看到更好的书。书一般是
一些补充,一些要点,一些技巧,真正基础的东西,还是在帮助和随机的文档中。

PS:borland的帮助和随机的文档似乎是越来越烂了,至今还没看到比D1的帮助和随机文档
作的更好的delphi版本。
 
dirk
ZRWeng、LeeChange人家是高手,你又不是什么高手,你歪几什么啊。那两位高手无论是人品,还是技术,绝对会比你这个混了8年,连木马都不会杀,还自诩自己是带着几个人做项目的项目经理强多了。我要是你,上了大学就不毕业了,在大学混它个10年,8年在毕业也无妨。出去免让木马把银行存折给偷了,丢的只剩下33块。
什么叫不顺意的就踩呢?就事论事,谈乱七八糟的做什么,我开帖子又不是开市场,我开市场我会给你预留摊位的,你放心。呵呵。。
我开了帖子,我就料想你这样的人会去跑着偷看一些自认为可以光宗耀祖的DD,你这样的人真是可笑,偷了些什么回来,就是你找到了上面说的这些,未免你也太不滑稽,也太丢你大爷的脸了吧?!素质之低,你大爷我脸上无光啊。
把我有关result问题解决了,我就算有本事,我等着你回答,否者你就夹你二条,给我瞧瞧的站那别动,听其他知道的人上课。
////////////////////////////
我是一只小小鸟,
小子记清楚了,你的记性最差,我得要反复提醒你,免的驴唇不对马嘴的乱说一气。要记住地址哦。
清华大学出版社 DELPHI6应用开发指南
[美]paunl kimmel著
郭旭 周建明 译
ISBN 7-900637-64-8
9787900637642
第109页去找答案。
看完这本书,你就可以给我彻底闭嘴了。恶心。没见过的就说没有。那希特勒你见过了?按你的逻辑希特勒这个人是不存在的,你的想法不荒唐么?!!!!!!
///////////////////////////////
Ale.,
其实我们不就是为一句话而产生的争论么?我说你菜,你说我狂,想想都可笑。
无论是DELPHI还是C/C++的“名词”,不都是人叫出来的么?我那有那么大的本事去创造一个静态的概念?我在一本老外写的书里见到了这个概念。你可以看一下,我上面提到的这本书。

 
暮佳雨, 是老板,我知道。老板也来大富翁呀?荣幸荣幸。[:)][:D]
 
今天真是乐死人了,dfw好久没这么热闹了,哈哈哈哈,我这里的弟兄今天也乐的要死,干嘛呐,哦,都在上dfw看某个跳大神的家伙在手舞足蹈呢,哈哈哈,大家都开心,就hygsxy小弟弟一个人郁闷,哈哈哈哈,我们决定封他为“高寿”(注意不是“手”啊),这样他也开心了,哈哈哈哈……
 
要是每天都这么热闹就好了。
这个贴子有点长了,换个话题,再开一个。
 
老人家
消消气,气大伤身啊.先去看看您的贴子把,您也成了名人啊.真是一贴成名啊.我还是那句话,一个delphi技术名称的建立只用两个途径
1由宝蓝官方提出.
2由某位大牛(或组织)提出,并得到绝大多少用户的认可.
您老人家认为那个名称符合那一条啊?
至于我让您恶心了,我要再一次的说抱歉,您是一个有七年经验的高人,您的心里素质不会这么菜把.我以后还要不要说话,我想您还不能把我的嘴给封了把.也许您还是个黑客高人,您把我的id给封了把.西特乐的事好象和那个名称的存在不是一回事把,我的逻辑学的不好,不过什么是偷换概念还是知道的.
最后,再次感谢您把那本书的信息提供的如此只全.我以准备购买 脑轻松 增加我的记忆力.
 
讨论技术,可以灌水,但不能进行人身攻击。
这是DFW的规矩。
 
dirk
只想哈哈笑。DFW里也许就是多了你这样行到终年的人,记住是终不是中哦,你爷爷的爷爷曾经教导我,你行至将死时,你言也善,你行至将亡时,你鸣叫也哀矣,我理解你的”发言“。
DFW里今天是真开了眼了,看看我一个是如何对付你和我是一只小小鸟。跳舞一个跳总是没意思的,我主跳,你和鸟娃陪跳可委屈了你们啊,毕竟都是经理级的么?那也没办法,中国人喜欢筹热闹已经是不争的事实,也怨不得你们如此的追随我,我身无分文,惟有赏两位老兄一点教导了。年岁大的人不能郁闷啊,小心心肌梗塞,脑血栓,令我开心的是一个比我更高“寿”(不是手)的领导,陪我跳了这么久,老话说的好,姜还是老的辣,果不其言。但你这个”寿“星还是要注意身体哦,毕竟早入黄土的还是你,少了你这个忠实的舞伴,跳舞好没意思。哈哈。。。
 
不价值,我要删贴了。
 
后退
顶部