在子类中重写了父类的属性
__property TStringList* Items = {write = witem, read = ritem};
void __fastcall witem(TStringList* s);
TStringList* __fastcall ritem();
在这个属性的读写函数中,可以对Items指针的地址进行操作和修改,得到完整的数据并加入自己的代码。
然而,当修改或者调用Items中的属性和方法的时候。就不能即时的对数据变化做出同步反应,执行加入的代码。
XX->Items->Add("Test"); // 执行顺序: TStringList* l =XX->Items::ritem(); l->Add(); 无法了解到加入的数据。并对其执行操作。
对于这种情况可以做一种折中的方法,不过会对代码的效率有一定影响。
[ 在调用属性Items的时候,对需要的数据进行读取并做出判断。如:写一个专用函数当读取属性时执行,对需要同步反应的数据做出调整。
XX->Items->Add("Test"); //XX->Items[3] = "Test";
//如果Items->Count 发生变化,则需要对对象Other做修改,Other->Count = Items->Count;
bool __fastcall rechangeother()
{
if(Other->Count==XX->Items->Count ) return false;
Other->Clear();
for(int n = 0; n <XX-> Items->Count; n++)Other->Add(XX->Items->Strings[n]);
return true;
}
在执行代码中:
{
rechangeother();
XXX = Other->Items->Strings[XX->Items->Count];
}
此种方法会对程序的编写思路产生影响,在有大量的代码时会产生问题。使情况变复杂。
这时可以使用这种方法,不过同样会对代码效率产生影响。还有可能比第一种效率差,可它的安全性较高。
修改自定义的属性方法ritems,且仍需一个辅助函数。同上面的rechangeother,对数据变化做响应。
TStringList* __fastcall ritems()
{
rechangeother();
return Parent::Items;
}
这样每次调用属性Items的时候都会修正数据的准确性。
而无须在做判断。不过可惜了效率。
<小艺>哪位高人有好方法请给本人信息,谢谢。
email: programuser@citiz.net qq: 694796939