2015-09-15 30 views
12

Aynı ada sahip iki özelliğe sahip olmak mümkün mü?Aynı ada sahip iki özelliğe sahip olmak mümkün mü?

property Cell [Cl, Rw: Integer]: string read getCell write setCell; 
property Cell [ColName: string; Rw: Integer]: string read getCellByCol write setCellByCol; 

Bunu denedim ve derleyici bunu yapmama izin vermiyor, ama belki bir hile ...?

+0

'Aşırı yüklenme' aynı zamanda yardımcı olmayacaktır ... – Ampere

+0

Yöntemin kendisinde gerçek geçirilen türü belirlediğiniz yerde varyant veya TMS gibi parametrelerle tek bir yönteme bağlı kalabilirsiniz. –

+0

Bu _is_ mümkündür - çeşit. Yanıtımıma göz at ... – HeartWare

cevap

25

Hayır - ama sonra tekrar: Evet ... Sıralama ...

function getP1(Cl,Rw : integer) : string; 
procedure setP1(C1,Rw : integer ; const s : string); 
function getP2(const Cl : string ; Rw : integer) : string; 
procedure setP2(const C1 : string ; Rw : integer ; const s : string); 
property P1[Cl,Rw : integer] : string read getP1 write setP1; default; 
property P1[const Cl : string ; Rw : integer] : string read getP2 write setP2; default; 

hile özelliğini isim aynı ve "varsayılan" maddesi ile hem işaretlemek için etmektir. Sonra çeşitli parametrelerle aynı özellik adını erişebilirsiniz:

P1['k',1]:=P1[2,1]; 
P1[2,1]:=P1['k',1]; 

bu offcially destekleniyorsa fine.Don't biliyor derler ya orada onunla bazı başka sorunlar var ama eğer iyi derler ve doğru çağırır getter/setter (Delphi 2010'da test edilmiştir).

Bu, yalnızca, sınıfınız için varsayılan bir özellik kullanmıyorsanız çalışır; çünkü çalışmayı başarabilmemin tek yolu varsayılan deyimdir.

+1

Evet, bu resmi olarak destekleniyor. Varsayılan özellik, sınıfa bir dizi olarak erişmenizi sağlar. Aşırı yükleme, 'diziye' farklı yollarla erişmenizi sağlar. Parametre türleri değiştiğinden, derleyici doğru aşırı yükü ayırt edebilir. ..... Tabii ki, varsayılan olmayan dizi özelliklerine neden izin verilmemesi benim için bir gizem. – Johan

+0

Gözlem için teşekkür ederim. Cevabınızı okumak gerçekten ilginçti. Sizce bu amaç için jeneriklerin kullanılması mümkün mü? Şu anda TDictionary 'adresinde düşünüyorum. –

+4

Alınan, yeni bir şey öğrendim! http://docwiki.embarcadero.com/RADStudio/Seattle/en/Properties#Array_Properties * Bir sınıf, belirli bir imzaya (array parametre listesi) sahip yalnızca bir varsayılan özelliğe sahip olabilir, ancak varsayılan özelliği aşırı yüklemek mümkündür. Varsayılan özelliği, alt sınıflardaki varsayılan nesneyi değiştirme veya gizleme beklenmedik davranışlara yol açabilir, çünkü derleyici her zaman statik olarak özelliklere bağlanır. * – fantaghirocco

İlgili konular