Biz TStringList bazı ilişkili nesnelerle birlikte dizeleri ekleyebilirsiniz:TStringList'te İşaretçi ve TObject girişleri nasıl ayırt edilir?
list: TStringList;
obj: MyObject;
obj := MyObject.Create();
list.AddObject("real object", obj);
Ayrıca basitçe yani Pointer, bir tamsayı değeri ile bir dize bağlamak için çok kullanışlı olabilir, örneğin:
list.AddObject("just an index", Pointer(7));
bir MyObject ya da sadece bir Pointer ise bu listedeki bir nesneye daha sonra erişim nasıl olduğunu öğrenmek isterseniz
? Böyle bir şey istiyorum:
for i := 0 to list.Count-1 do
if list.Objects[i] is MyObject then
begin
// ...
// Do something with list.Objects[i]
// ...
end;
ama bu besbelli list.Objects [i] sadece Pointer ise ihlali erişmek yol açar. Şimdiden teşekkürler!
iyi çözüm ikisini karıştırmak getirmemektir nesneleri saklamak istiyorsanız, nesneleri saklayın ve sonra 'nil' ile karşılaştırabilir veya 'Assigned' komutunu kullanabilirsiniz. Tamsayıları depolamak istiyorsanız, tamsayıları depolayın ('İşaretçi (7) 'ne yapar - bu bir * işaretçisini saklamıyor * derleyici şikayeti geçmesi için bir işaretçi olarak tamsayı typecast.) –
Genel olarak, $ FFFF'den daha düşük adreslerin sahte nesneler olduğu varsayılabilir - nesneler değil, bu bellek aralığına okuma erişiminiz yok. Bunu yedeklemek için belgeleri bul –
Bu soru ya merak ediyor (iyi) ya da pervasızlık (kötü). Gerçek kodda bu tür güvensiz veya bozuk fikir kullanmaktan kaçının, ya da kötü kötü şeyler olacak. Merak ettiysem, burada üstleneceğim gibi, o zaman bu konuyu düşünmek için kudos. Neden Tobjects'a yapışıp bir veri sahibi yapmıyorsunuz? Tmyintegerdata ... –