OVH Cloud OVH Cloud

Casse-tête de structure de class

17 réponses
Avatar
Faust
(je suis avec le framework 1.1)

j'essaye d'obtenir une structure de classe assez simple (en tous cas
sur le papier) mais je bloque dessus:

j'aimerais avoir une classe parente abstraite qui contiendait (au
moins) une méthode statique permettant (entre autre) de créer puis
d'initialiser une instance de la classe enfant

mon deuxième mais moins important problème est que l'une des classes
enfant necessite des paramètres supplémentaires

en gros, avoir ça mais je bloque sur le codage de init():

public abstract class parent
{
public virtual void Fill(object param1)
{
}

static public ????? init(object param1)
{
// creation de l'objet de classe enfant
???? tmp = new ????();
// initialisation
tmp.Fill(param1);
return tmp;
}
}

public class enfant1 : parent
{
public override void Fill(object param1)
{
// initialisation propre à la classe enfant1
}
}

public class enfant2 : parent
{
public override void Fill(object param1, object param2)
{
// initialisation propre à la classe enfant2
}
}

--
*/Teträm/*
http://www.tetram.org

"Quand le Troll parle,
L'homme avisé l'écoute"

7 réponses

1 2
Avatar
Ambassadeur Kosh
> classes et donc point de this.GetType() )



ça, c'est typeof

typeof( Test1 ), c'est pareil que GetType() sur un objet cree par new
Test1(...)
Avatar
Faust
/_Ambassadeur Kosh_ a émis l'idée suivante/ :
classes et donc point de this.GetType() )





ça, c'est typeof



typeof( Test1 ), c'est pareil que GetType() sur un objet cree par new
Test1(...)



vivi chais bien, mais l'un comme l'autre (GetType et typeof) ne sont
pas utilisables dans la méthode de classe

en fait, je n'ai rien trouvé qui soit utilisable dans la méthode de
classe qui permette de connaitre, par exemple, le nom de la classe dans
laquelle on est...
c'est peut-être pas pour rien que les méthodes de classes ne peuvent
pas être virtual (donc override) (je trouve ça assez dommage
d'ailleurs)

--
*/Teträm/*
http://www.tetram.org

"Mange d'abord, defeque ensuite: tu réfléchiras plus tard" - Proverbe
Troll
Avatar
Faust
/_Ambassadeur Kosh_ a exposé/ :
bah c'est pas que je persiste mais j'arrive pas à percuter comment
l'utiliser.... mais pour le moment j'arrive pas comprendre à quelle classe
(parent ou factory/enfant1/enfant2) correspond ta classe Test





Test, c'est Parent.
Test1, Test2, c'est les Enfants chez toi.
et ma foi, Factory, c'est Factory...



oki

c'est effectivement ce que j'ai fait pour le moment





ouaih bon, ça craint...



si tu n'as pas de genericité, tu peux aussi faire ça, peut être que c'est un
modele qui va mieux te parler.
c'est séduisant, mais ça se rapproche de l'heritage d'implantation, et c'est
pas terrible.



[snip]
chuis du même avis, c'est pas top

ceci dit, en y reflechissant, je peux peut-être tourner ma hiérarchie
de classe autrement ce qui solutionnerait ce problème (mais en créerait
d'autre pour le coup :-/)

dommage qu'on puisse pas utiliser le FW2 avec VS2003 :(

--
*/Teträm/*
http://www.tetram.org

"Le monde est rond comme le cul d'une pucelle. On ne peut pas s'y
perdre"
Chevalier Or-Azur
Avatar
Ambassadeur Kosh
> en fait, je n'ai rien trouvé qui soit utilisable dans la méthode de classe
qui permette de connaitre, par exemple, le nom de la classe dans laquelle
on est...
c'est peut-être pas pour rien que les méthodes de classes ne peuvent pas
être virtual (donc override) (je trouve ça assez dommage d'ailleurs)



ok. mettons les choses au point. le C++ à la mode 1980 et les economies à
deux francs, ça sert plus à rien.
oublie static comme tu le connais.

prenons le cas d'un tri. tout bon CMen va ecrire une fonction et donc la
mettre dans une methode static.
il suffirait de faire

public abstract class SortAlgorithm
{
public void abstract Execute(double [] v) ;

public static readonly SortAlgorithm Bubble = new BubbleSortAlgorithm()
;
public static readonly SortAlgorithm Heap = new HeapSortAlgorithm() ;
public static readonly SortAlgorithm Quick = new QuickSortAlgorithm() ;
}

// au choix, nested ou pas
public sealed class BubbleSortAlgorithm....

maintenant, tu as besoin d'un tri, pas de methode static, tu as une
instance. et c'est pas ce que ça coute de faire un new BubbleSortAlgorithm
avant de s'en servir.
donc pas de problemes de type
Avatar
Faust
/_Lloyd Dupont_ a pensé très fort/ :
3. utiliser les generic (C# 2.0) comme montrer dans l'exemple en fichier
joint.



j'ai pas d'expérience sur les generics mais effectivement, de ce que
j'en ai lu et de ce que je comprends, ça semble être ça qui est le plus
proche de ce que je voudrais faire

--
*/Teträm/*
http://www.tetram.org

"Tape d'abord, tape ensuite, et tape pour finir" - Proverbe Troll
Avatar
Paul Bacelar
http://msdn.microsoft.com/msdnmag/issues/03/03/DesignPatterns/
--
Paul Bacelar

"Faust" wrote in message
news:
/_Lloyd Dupont_ a pensé très fort/ :
> 3. utiliser les generic (C# 2.0) comme montrer dans l'exemple en fichier
> joint.

j'ai pas d'expérience sur les generics mais effectivement, de ce que
j'en ai lu et de ce que je comprends, ça semble être ça qui est le plus
proche de ce que je voudrais faire

--
*/Teträm/*
http://www.tetram.org

"Tape d'abord, tape ensuite, et tape pour finir" - Proverbe Troll




Avatar
Faust
merci beaucoup, ça a l'air interressant

/_Paul Bacelar_ a écrit/ :
http://msdn.microsoft.com/msdnmag/issues/03/03/DesignPatterns/
--
Paul Bacelar



"Faust" wrote in message
news:
/_Lloyd Dupont_ a pensé très fort/ :
3. utiliser les generic (C# 2.0) comme montrer dans l'exemple en fichier
joint.



j'ai pas d'expérience sur les generics mais effectivement, de ce que
j'en ai lu et de ce que je comprends, ça semble être ça qui est le plus
proche de ce que je voudrais faire

--
*/Teträm/*
http://www.tetram.org

"Tape d'abord, tape ensuite, et tape pour finir" - Proverbe Troll






--
*/Teträm/*
http://www.tetram.org

"Entre le cerveau et la main, le médiateur doit être le coeur" - Fritz
Lang
1 2