Board logo

Subject: 修改只读属性? [Print This Page]

Author: kendling    Time: 2007-1-24 10:39     Subject: 修改只读属性?

哈,最近发现一个修改只读属性的方法,就是通过指针。

不过还有条件

只能修改变量属性,如:
property ReadOnlyProperty: string read FReadOnlyProperty;

如果是方法属性则不能修改:
property ReadOnlyByFunc: string read GetReadOnlyByFunc;



例:
TMyClass = class
  FProA: string;
public
  property ProA: string read FProA;
end;


var
  pp: ^string;    //定义指针
begin
  PP := @TestClass.ProA;    //TestClass 是 TMyClass的实例
  pp^ := 'This readonly property was modified!';
end;


其他类型的属性也可以噢。

[ 本帖最后由 kendling 于 2007-1-24 11:02 编辑 ]
Author: Passion    Time: 2007-1-24 11:21

好点子,加精。
Author: bahamut8348    Time: 2007-1-24 11:29

极度BS冬仔的头像,
竟然玩起RY来了
Author: skyjacker    Time: 2007-1-24 16:17

顶。

小指针,大作用。
var
  I: Integer;
  S: string;

I  在内存中是个指针,指向存储变量内容的地址
S 在内存中是个指针的指针,存放指向S内容的指针的地址

指针既是地址。

如果可以获得了具体的内存地址,就可以修改了。
Author: Passion    Time: 2007-1-24 17:07

SkyJacker这样说的指针比平常的指针概念多了一层,应该不太符合日常的理解。

C/Pascal等高级语言里头的指针其实是一个存储了地址的内存单元,其存储的内容(是一个地址)所指的地方才是这个指针所指的内容。
而I:Integer只是一个内存单元,I的内容是整型变量,没有地址的说法。

@I才能得到I的地址。
Author: bahamut8348    Time: 2007-1-25 12:23


左值和右值
Author: koalaone    Time: 2007-1-26 14:39

有点意思
Author: skyjacker    Time: 2007-3-23 08:52

能不能修改全局常量的值?
用 P := @ConstA 获取指针不能编译.

我想将修改 ConstA 用于
Format(ConstA  ,);

如果 ConstA  可以内部修改, 因此可以少不少 If 判断.

[ 本帖最后由 skyjacker 于 2007-3-23 08:57 编辑 ]
Author: Passion    Time: 2007-3-23 09:03

那还用啥const,直接var了。
Author: kendling    Time: 2007-3-28 11:59

哈哈,对,用var就好了。




Welcome to CnPack Forum (http://bbs.cnpack.org/) Powered by Discuz! 5.0.0