PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > nzn.fr.delphi > a propos d'heritage (Tstrings)
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
a propos d'heritage (Tstrings)

Réponse
 
LinkBack Outils de la discussion
Vieux 27/10/2007, 12h13   #1 (permalink)
loki
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut a propos d'heritage (Tstrings)

Soit la classe Tstrings :

TStrings = class(TPersistent)
private
function GetValue(const Name: string): string;
procedure SetValue(const Name, Value: string);
protected
public
property Values[const Name: string]: string read GetValue write SetValue;
end;

Je voudrais dans une classe enfant modifier la procedure SetValue .. comment je peux faire cela ? bon je sais c'est pas possible mais bon ...

a++
stéphane
  Réponse avec citation
Vieux 27/10/2007, 12h16   #2 (permalink)
Flo
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: a propos d'heritage (Tstrings)

loki a écrit :
> Soit la classe Tstrings :
>
> TStrings = class(TPersistent)
> private
> function GetValue(const Name: string): string;
> procedure SetValue(const Name, Value: string);
> protected
> public
> property Values[const Name: string]: string read GetValue write SetValue;
> end;
>
> Je voudrais dans une classe enfant modifier la procedure SetValue .. comment je peux faire cela ? bon je sais c'est pas possible mais bon ...


Salut,

il faut ajouter le mot clé "virtual" après la procedure SetValue pour
autoriser les surcharges dans la classe parente, le mot "override" doit
être utilisé sur cette même fonction dans les déclarations des classes
descendant de TStrings.
  Réponse avec citation
Vieux 27/10/2007, 12h39   #3 (permalink)
Henri Gourvest
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: a propos d'heritage (Tstrings)

Et pourquoi ne pas plutot surcharger les fonctions get, put et IndexOfName ?

loki a écrit :
> Soit la classe Tstrings :
>
> TStrings = class(TPersistent)
> private
> function GetValue(const Name: string): string;
> procedure SetValue(const Name, Value: string);
> protected
> public
> property Values[const Name: string]: string read GetValue write SetValue;
> end;
>
> Je voudrais dans une classe enfant modifier la procedure SetValue .. comment je peux faire cela ? bon je sais c'est pas possible mais bon ...
>
> a++
> stéphane

  Réponse avec citation
Vieux 28/10/2007, 13h31   #4 (permalink)
loki
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: a propos d'heritage (Tstrings)

ouai, je sais bien ca ... mais c'est les source de delphi ! et je peux pas y toucher ....

a++
stéphane

"Flo" <flouc@laposte.net> wrote in message news:ffv6pp$4o2$1@sd-6498.dedibox.fr...

> loki a écrit :

>> Soit la classe Tstrings :
>>
>> TStrings = class(TPersistent)
>> private
>> function GetValue(const Name: string): string;
>> procedure SetValue(const Name, Value: string);
>> protected
>> public
>> property Values[const Name: string]: string read GetValue write SetValue;
>> end;
>>
>> Je voudrais dans une classe enfant modifier la procedure SetValue .. comment je peux faire cela ? bon je sais c'est pas possible mais bon ...

>
> Salut,
>
> il faut ajouter le mot clé "virtual" après la procedure SetValue pour
> autoriser les surcharges dans la classe parente, le mot "override" doit
> être utilisé sur cette même fonction dans les déclarations des classes
> descendant de TStrings.
  Réponse avec citation
Vieux 28/10/2007, 13h33   #5 (permalink)
loki
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: a propos d'heritage (Tstrings)

bien parceque le hic c'est que justement le truc que je veux changer c'est dans les 3 lignes de code dans le procedure SetValue ! pas de bol je sais ...

en fait je veux que l'instruction

myStringList['aname'] := ''

ne me supprime pas la ligne "aname=" du TstringsList et ca c'est uniquement dans le setvalue que ca se passe !

a++
stéphane


"Henri Gourvest" <x@x.com> wrote in message news:ffv81q$5ih$1@sd-6498.dedibox.fr...

> Et pourquoi ne pas plutot surcharger les fonctions get, put et IndexOfName ?
>
> loki a écrit :

>> Soit la classe Tstrings :
>>
>> TStrings = class(TPersistent)
>> private
>> function GetValue(const Name: string): string;
>> procedure SetValue(const Name, Value: string);
>> protected
>> public
>> property Values[const Name: string]: string read GetValue write SetValue;
>> end;
>>
>> Je voudrais dans une classe enfant modifier la procedure SetValue .. comment je peux faire cela ? bon je sais c'est pas possible mais bon ...
>>
>> a++
>> stéphane

  Réponse avec citation
Vieux 29/10/2007, 10h47   #6 (permalink)
Loïs Bégué
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: a propos d'heritage (Tstrings)

loki schrieb:
> bien parceque le hic c'est que justement le truc que je veux changer c'est dans les 3 lignes de code dans le procedure SetValue ! pas de bol je sais ...
>
> en fait je veux que l'instruction
>
> myStringList['aname'] := ''
>
> ne me supprime pas la ligne "aname=" du TstringsList et ca c'est uniquement dans le setvalue que ca se passe !
>
> a++
> stéphane
>
>
> "Henri Gourvest" <x@x.com> wrote in message news:ffv81q$5ih$1@sd-6498.dedibox.fr...
>> Et pourquoi ne pas plutot surcharger les fonctions get, put et IndexOfName ?
>>
>> loki a écrit :
>>> Soit la classe Tstrings :
>>>
>>> TStrings = class(TPersistent)
>>> private
>>> function GetValue(const Name: string): string;
>>> procedure SetValue(const Name, Value: string);
>>> protected
>>> public
>>> property Values[const Name: string]: string read GetValue write SetValue;
>>> end;
>>>
>>> Je voudrais dans une classe enfant modifier la procedure SetValue .. comment je peux faire cela ? bon je sais c'est pas possible mais bon ...
>>>
>>> a++
>>> stéphane

Si je ne me gourre pas (mais j'ai pas re-testé cette technique récemment
.... ça fait tellement longtemps que je ne l'ai plus employée), on peut
hacker un peu.

Dans le formulaire ou tu as besoin de la fonction:

Unit Form1;
interface


Uses ..... ;

TStrings = class (Classes.TStrings)
procedure SetValue(const Name, Value: string);
End;

TForm1 = class (TForm)
...
End;

Implementation
....
procedure TStrings.SetValue(const Name, Value: string);
Begin
....
inherit SetValue(...); (* si nécessaire, c.a.d. la plupart du temps *)
....
End;

  Réponse avec citation
Vieux 29/10/2007, 15h08   #7 (permalink)
Henri Gourvest
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: a propos d'heritage (Tstrings)

loki a écrit :
> bien parceque le hic c'est que justement le truc que je veux changer c'est dans les 3 lignes de code dans le procedure SetValue ! pas de bol je sais ...
>
> en fait je veux que l'instruction
>
> myStringList['aname'] := ''
>
> ne me supprime pas la ligne "aname=" du TstringsList et ca c'est uniquement dans le setvalue que ca se passe !
>

hum oui, évidemment, et comme ca:
myStringList['aname'] := #0
ca t'irait ?
  Réponse avec citation
Vieux 29/10/2007, 15h27   #8 (permalink)
Henri Gourvest
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: a propos d'heritage (Tstrings)



loki a écrit :
> bien parceque le hic c'est que justement le truc que je veux changer c'est dans les 3 lignes de code dans le procedure SetValue ! pas de bol je sais ...
>
> en fait je veux que l'instruction
>
> myStringList['aname'] := ''
>
> ne me supprime pas la ligne "aname=" du TstringsList et ca c'est uniquement dans le setvalue que ca se passe !


ou alors surcharges delete comme ca:

procedure TMyStringList.Delete(Index: Integer);
var
name: string;
begin
if Index >= 0 then
begin
Name := ExtractName(Get(Index));
if name <> '' then
Put(Index, Name + '=') else
inherited;
end;
end;
  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 15h34.


Édité par : vBulletin® version 3.7.2
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,14779 seconds with 16 queries