CnPack Forum » 技术板块灌水区 » 修改只读属性?


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

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

不过还有条件

只能修改变量属性,如:
property ReadOnlyProperty: string [color=red]read FReadOnlyProperty[/color];

如果是方法属性则不能修改:
property ReadOnlyByFunc: string [color=red]read GetReadOnlyByFunc[/color];



例:
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;


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

[[i] 本帖最后由 kendling 于 2007-1-24 11:02 编辑 [/i]]

2007-1-24 11:21 Passion
好点子,加精。

2007-1-24 11:29 bahamut8348
极度BS冬仔的头像,
竟然玩起RY来了

2007-1-24 16:17 skyjacker
顶。

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

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

指针既是地址。

如果可以获得了具体的内存地址,就可以修改了。

2007-1-24 17:07 Passion
SkyJacker这样说的指针比平常的指针概念多了一层,应该不太符合日常的理解。

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

@I才能得到I的地址。

2007-1-25 12:23 bahamut8348
:D :D
左值和右值

2007-1-26 14:39 koalaone
有点意思

2007-3-23 08:52 skyjacker
能不能修改全局常量的值?
用 P := @ConstA 获取指针不能编译.

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

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

[[i] 本帖最后由 skyjacker 于 2007-3-23 08:57 编辑 [/i]]

2007-3-23 09:03 Passion
那还用啥const,直接var了。:lol

2007-3-28 11:59 kendling
哈哈,对,用var就好了。

页: [1]
查看完整版本: 修改只读属性?


Powered by Discuz! Archiver 5.0.0  © 2001-2006 Comsenz Inc.