Et une classe fille, qui, forcément, hérite de sa mère :
public class MyFille : Myclass
{
}
1: Dans la classe mère, je suis obligé de mettre un constructeur, parce que
sinon, le compilateur est pas content. Pourtant, je voudrais m'assurer que
personne n'utilise la classe mère toute seule. Elle n'existe que pour ses
filles.
2: Par contre, j'ai beaucoup de filles qui ont des fonctions semblables :
int myPorteMonnaie(). Je voudrais donc que la mère ait cette fonction
implémentée, et que les filles en hérite, et que celle qui est pas d'accord
la redéfinisse. Mais, comme la mère est virtuelle pure, ça marche pas comme
ça. Donc, y-a-t'il un moyen que j'ai pas vu ? Où dois-je refaire un héritage
non virtuel qui servirait juste aux filles pareil, qui hériteraient juste de
cette classe temporaire ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Hervé
Bonjour,
Pour le premier problème,il se pourrait que tu t'en sortes avec un constructeur privé ?
Pour l'autre problème, as-tu essayé qqch comme :
public abstract class MyClass {
public virtual int MyPorteMonnaie() {...} }
public class MyFille : MyClass { public override int MyPorteMonnaie() {...} }
"Mathieu Chavoutier" a écrit dans le message de news:
Bonjour.
J'ai une classe virtuelle :
public abstract class MyClass { }
Et une classe fille, qui, forcément, hérite de sa mère :
public class MyFille : Myclass { }
1: Dans la classe mère, je suis obligé de mettre un constructeur, parce
que
sinon, le compilateur est pas content. Pourtant, je voudrais m'assurer que personne n'utilise la classe mère toute seule. Elle n'existe que pour ses filles.
2: Par contre, j'ai beaucoup de filles qui ont des fonctions semblables : int myPorteMonnaie(). Je voudrais donc que la mère ait cette fonction implémentée, et que les filles en hérite, et que celle qui est pas
d'accord
la redéfinisse. Mais, comme la mère est virtuelle pure, ça marche pas
comme
ça. Donc, y-a-t'il un moyen que j'ai pas vu ? Où dois-je refaire un
héritage
non virtuel qui servirait juste aux filles pareil, qui hériteraient juste
de
cette classe temporaire ?
Je vous remercie de toute réponse.
Bonjour,
Pour le premier problème,il se pourrait que tu t'en sortes avec un
constructeur privé ?
Pour l'autre problème, as-tu essayé qqch comme :
public abstract class MyClass
{
public virtual int MyPorteMonnaie() {...}
}
public class MyFille : MyClass
{
public override int MyPorteMonnaie() {...}
}
"Mathieu Chavoutier" <nospam@no.spam> a écrit dans le message de
news:OY6dTWCaEHA.4052@TK2MSFTNGP10.phx.gbl...
Bonjour.
J'ai une classe virtuelle :
public abstract class MyClass
{
}
Et une classe fille, qui, forcément, hérite de sa mère :
public class MyFille : Myclass
{
}
1: Dans la classe mère, je suis obligé de mettre un constructeur, parce
que
sinon, le compilateur est pas content. Pourtant, je voudrais m'assurer que
personne n'utilise la classe mère toute seule. Elle n'existe que pour ses
filles.
2: Par contre, j'ai beaucoup de filles qui ont des fonctions semblables :
int myPorteMonnaie(). Je voudrais donc que la mère ait cette fonction
implémentée, et que les filles en hérite, et que celle qui est pas
d'accord
la redéfinisse. Mais, comme la mère est virtuelle pure, ça marche pas
comme
ça. Donc, y-a-t'il un moyen que j'ai pas vu ? Où dois-je refaire un
héritage
non virtuel qui servirait juste aux filles pareil, qui hériteraient juste
Pour le premier problème,il se pourrait que tu t'en sortes avec un constructeur privé ?
Pour l'autre problème, as-tu essayé qqch comme :
public abstract class MyClass {
public virtual int MyPorteMonnaie() {...} }
public class MyFille : MyClass { public override int MyPorteMonnaie() {...} }
"Mathieu Chavoutier" a écrit dans le message de news:
Bonjour.
J'ai une classe virtuelle :
public abstract class MyClass { }
Et une classe fille, qui, forcément, hérite de sa mère :
public class MyFille : Myclass { }
1: Dans la classe mère, je suis obligé de mettre un constructeur, parce
que
sinon, le compilateur est pas content. Pourtant, je voudrais m'assurer que personne n'utilise la classe mère toute seule. Elle n'existe que pour ses filles.
2: Par contre, j'ai beaucoup de filles qui ont des fonctions semblables : int myPorteMonnaie(). Je voudrais donc que la mère ait cette fonction implémentée, et que les filles en hérite, et que celle qui est pas
d'accord
la redéfinisse. Mais, comme la mère est virtuelle pure, ça marche pas
comme
ça. Donc, y-a-t'il un moyen que j'ai pas vu ? Où dois-je refaire un
héritage
non virtuel qui servirait juste aux filles pareil, qui hériteraient juste
de
cette classe temporaire ?
Je vous remercie de toute réponse.
Mathieu Chavoutier
"Hervé" a écrit dans le message de news:40f2b31e$0$24452$
Bonjour,
Pour le premier problème,il se pourrait que tu t'en sortes avec un constructeur privé ?
Je viens de tester, et il me dit :
'zouip.MyClass()' est inaccessible en raison de son niveau de protection
Pour l'autre problème, as-tu essayé qqch comme :
public abstract class MyClass {
public virtual int MyPorteMonnaie() {...} }
public class MyFille : MyClass { public override int MyPorteMonnaie() {...} }
Ca marche, merci :o)
"Hervé" <news@news.fr> a écrit dans le message de
news:40f2b31e$0$24452$636a15ce@news.free.fr...
Bonjour,
Pour le premier problème,il se pourrait que tu t'en sortes avec un
constructeur privé ?
Je viens de tester, et il me dit :
'zouip.MyClass()' est inaccessible en raison de son niveau de protection
Pour l'autre problème, as-tu essayé qqch comme :
public abstract class MyClass
{
public virtual int MyPorteMonnaie() {...}
}
public class MyFille : MyClass
{
public override int MyPorteMonnaie() {...}
}
"Hervé" a écrit dans le message de news:40f2b31e$0$24452$
Bonjour,
Pour le premier problème,il se pourrait que tu t'en sortes avec un constructeur privé ?
Je viens de tester, et il me dit :
'zouip.MyClass()' est inaccessible en raison de son niveau de protection
Pour l'autre problème, as-tu essayé qqch comme :
public abstract class MyClass {
public virtual int MyPorteMonnaie() {...} }
public class MyFille : MyClass { public override int MyPorteMonnaie() {...} }
Ca marche, merci :o)
Hervé
Bonjour.
1: Dans la classe mère, je suis obligé de mettre un constructeur, parce
que
sinon, le compilateur est pas content. Pourtant, je voudrais m'assurer que personne n'utilise la classe mère toute seule. Elle n'existe que pour ses filles.
> Pour le premier problème,il se pourrait que tu t'en sortes avec un > constructeur privé ?
Un constructeur protected plutôt, afin que les classes filles puissent l'appeler...
Hervé
Bonjour.
1: Dans la classe mère, je suis obligé de mettre un constructeur, parce
que
sinon, le compilateur est pas content. Pourtant, je voudrais m'assurer que
personne n'utilise la classe mère toute seule. Elle n'existe que pour ses
filles.
> Pour le premier problème,il se pourrait que tu t'en sortes avec un
> constructeur privé ?
Un constructeur protected plutôt, afin que les classes filles puissent
l'appeler...
1: Dans la classe mère, je suis obligé de mettre un constructeur, parce
que
sinon, le compilateur est pas content. Pourtant, je voudrais m'assurer que personne n'utilise la classe mère toute seule. Elle n'existe que pour ses filles.
> Pour le premier problème,il se pourrait que tu t'en sortes avec un > constructeur privé ?
Un constructeur protected plutôt, afin que les classes filles puissent l'appeler...
Hervé
Zazar
Bonsoir,
Un constructeur protected plutôt, afin que les classes filles puissent l'appeler...
Malheuresement, un constructeur protected n'empêche pas l'utlisation de la classe mère directement. Un exemple :
public class MyClass1 { protected MyClass1() { } }
public class MyClass2 : MyClass1 { public static MyClass1() { return new MyClass1(); } }
Heureusement cette horrible magouille ne devrait plus être possible avec la version 2.0 du framework.
-- Zazar
Bonsoir,
Un constructeur protected plutôt, afin que les classes filles puissent
l'appeler...
Malheuresement, un constructeur protected n'empêche pas l'utlisation de la
classe mère directement.
Un exemple :
public class MyClass1 {
protected MyClass1() {
}
}
public class MyClass2 : MyClass1 {
public static MyClass1() {
return new MyClass1();
}
}
Heureusement cette horrible magouille ne devrait plus être possible avec la
version 2.0 du framework.
Un constructeur protected plutôt, afin que les classes filles puissent l'appeler...
Malheuresement, un constructeur protected n'empêche pas l'utlisation de la classe mère directement. Un exemple :
public class MyClass1 { protected MyClass1() { } }
public class MyClass2 : MyClass1 { public static MyClass1() { return new MyClass1(); } }
Heureusement cette horrible magouille ne devrait plus être possible avec la version 2.0 du framework.
-- Zazar
Zazar
Bonsoir,
J'ai une classe virtuelle :
public abstract class MyClass { }
Et une classe fille, qui, forcément, hérite de sa mère :
public class MyFille : Myclass { }
1: Dans la classe mère, je suis obligé de mettre un constructeur, parce
que
sinon, le compilateur est pas content. Pourtant, je voudrais m'assurer que personne n'utilise la classe mère toute seule. Elle n'existe que pour ses filles.
Vous avez déclaré votre classe comme étant abstraite, cela suffit.
2: Par contre, j'ai beaucoup de filles qui ont des fonctions semblables : int myPorteMonnaie(). Je voudrais donc que la mère ait cette fonction implémentée, et que les filles en hérite, et que celle qui est pas
d'accord
la redéfinisse. Mais, comme la mère est virtuelle pure, ça marche pas
comme
Une classe virtuelle pure, c'est une interface. Là votre classe est "seulement" abstraite.
ça. Donc, y-a-t'il un moyen que j'ai pas vu ? Où dois-je refaire un
héritage
non virtuel qui servirait juste aux filles pareil, qui hériteraient juste
de
cette classe temporaire ?
La réponse d'Hervé est la bonne.
-- Zazar
Bonsoir,
J'ai une classe virtuelle :
public abstract class MyClass
{
}
Et une classe fille, qui, forcément, hérite de sa mère :
public class MyFille : Myclass
{
}
1: Dans la classe mère, je suis obligé de mettre un constructeur, parce
que
sinon, le compilateur est pas content. Pourtant, je voudrais m'assurer que
personne n'utilise la classe mère toute seule. Elle n'existe que pour ses
filles.
Vous avez déclaré votre classe comme étant abstraite, cela suffit.
2: Par contre, j'ai beaucoup de filles qui ont des fonctions semblables :
int myPorteMonnaie(). Je voudrais donc que la mère ait cette fonction
implémentée, et que les filles en hérite, et que celle qui est pas
d'accord
la redéfinisse. Mais, comme la mère est virtuelle pure, ça marche pas
comme
Une classe virtuelle pure, c'est une interface. Là votre classe est
"seulement" abstraite.
ça. Donc, y-a-t'il un moyen que j'ai pas vu ? Où dois-je refaire un
héritage
non virtuel qui servirait juste aux filles pareil, qui hériteraient juste
Et une classe fille, qui, forcément, hérite de sa mère :
public class MyFille : Myclass { }
1: Dans la classe mère, je suis obligé de mettre un constructeur, parce
que
sinon, le compilateur est pas content. Pourtant, je voudrais m'assurer que personne n'utilise la classe mère toute seule. Elle n'existe que pour ses filles.
Vous avez déclaré votre classe comme étant abstraite, cela suffit.
2: Par contre, j'ai beaucoup de filles qui ont des fonctions semblables : int myPorteMonnaie(). Je voudrais donc que la mère ait cette fonction implémentée, et que les filles en hérite, et que celle qui est pas
d'accord
la redéfinisse. Mais, comme la mère est virtuelle pure, ça marche pas
comme
Une classe virtuelle pure, c'est une interface. Là votre classe est "seulement" abstraite.
ça. Donc, y-a-t'il un moyen que j'ai pas vu ? Où dois-je refaire un
héritage
non virtuel qui servirait juste aux filles pareil, qui hériteraient juste
de
cette classe temporaire ?
La réponse d'Hervé est la bonne.
-- Zazar
David Rousset [MS]
Bonjour,
Le mot clé "abstract" indique que votre classe est abstraite. Donc, elle ne pourra pas être instanciée directement par du code.
Pour votre question 1, la mise en place d'un constructeur ne pose donc pas de problème puisque personne ne pourra l'appeler directement. D'ailleurs, vous pouvez faire le test en essayant instancier votre classe abstraite : à la compilation vous aurez bien une erreur vous indiquant que cela n'est pas possible.
Pour votre deuxième question, il vous suffit de mettre la méthode au niveau de la classe mère abstraite en "virtual" pour qu'elle puisse être éventuellement redéfinie plus tard. En effet, rien n'empêche de mettre des méthodes non abstraites dans une classe abstraite.
Pour conclure, vous aurez donc un code semblable à
public abstract class MyClass { public MyClass(){} virtual protected int myPorteMonnaie() { return 1; } }
public class AutreClass : MyClass { }
Ensuite, vous pourrez instancier vos 2 classes de la manière suivante :
//MyClass toto = new MyClass(); MyClass titi = new AutreClass(); AutreClass tata = new AutreClass();
Vous noterez que la première ligne en commentaire génère bien une erreur de compilation, ce qui est normal. Par contre, rien ne m'empêche instancier un objet de type AutreClass et de l'affecter dans une référence de type MyClass car je n'instancie pas dans ce cas d'objet MyClass directement mais bien une classe dérivée.
Voilà, j'espère avoir éclairé un petit peu tout ça. :)
Bye, -- David Rousset Microsoft France -------------------- Merci de bien vouloir répondre à ce message dans le newsgroup où il a été posté. Je le consulte régulièrement.
"Mathieu Chavoutier" a écrit dans le message de news:
Bonjour.
J'ai une classe virtuelle :
public abstract class MyClass { }
Et une classe fille, qui, forcément, hérite de sa mère :
public class MyFille : Myclass { }
1: Dans la classe mère, je suis obligé de mettre un constructeur, parce que sinon, le compilateur est pas content. Pourtant, je voudrais m'assurer que personne n'utilise la classe mère toute seule. Elle n'existe que pour ses filles.
2: Par contre, j'ai beaucoup de filles qui ont des fonctions semblables : int myPorteMonnaie(). Je voudrais donc que la mère ait cette fonction implémentée, et que les filles en hérite, et que celle qui est pas d'accord la redéfinisse. Mais, comme la mère est virtuelle pure, ça marche pas comme ça. Donc, y-a-t'il un moyen que j'ai pas vu ? Où dois-je refaire un héritage non virtuel qui servirait juste aux filles pareil, qui hériteraient juste de cette classe temporaire ?
Je vous remercie de toute réponse.
Bonjour,
Le mot clé "abstract" indique que votre classe est abstraite. Donc, elle
ne pourra pas être instanciée directement par du code.
Pour votre question 1, la mise en place d'un constructeur ne pose donc
pas de problème puisque personne ne pourra l'appeler directement.
D'ailleurs, vous pouvez faire le test en essayant instancier votre classe
abstraite : à la compilation vous aurez bien une erreur vous indiquant que
cela n'est pas possible.
Pour votre deuxième question, il vous suffit de mettre la méthode au
niveau de la classe mère abstraite en "virtual" pour qu'elle puisse être
éventuellement redéfinie plus tard. En effet, rien n'empêche de mettre des
méthodes non abstraites dans une classe abstraite.
Pour conclure, vous aurez donc un code semblable à
public abstract class MyClass
{
public MyClass(){}
virtual protected int myPorteMonnaie()
{
return 1;
}
}
public class AutreClass : MyClass
{
}
Ensuite, vous pourrez instancier vos 2 classes de la manière suivante :
//MyClass toto = new MyClass();
MyClass titi = new AutreClass();
AutreClass tata = new AutreClass();
Vous noterez que la première ligne en commentaire génère bien une erreur
de compilation, ce qui est normal. Par contre, rien ne m'empêche instancier
un objet de type AutreClass et de l'affecter dans une référence de type
MyClass car je n'instancie pas dans ce cas d'objet MyClass directement mais
bien une classe dérivée.
Voilà, j'espère avoir éclairé un petit peu tout ça. :)
Bye,
--
David Rousset
Microsoft France
--------------------
Merci de bien vouloir répondre à ce message dans le newsgroup où il a été
posté. Je le consulte régulièrement.
"Mathieu Chavoutier" <nospam@no.spam> a écrit dans le message de news:
OY6dTWCaEHA.4052@TK2MSFTNGP10.phx.gbl...
Bonjour.
J'ai une classe virtuelle :
public abstract class MyClass
{
}
Et une classe fille, qui, forcément, hérite de sa mère :
public class MyFille : Myclass
{
}
1: Dans la classe mère, je suis obligé de mettre un constructeur, parce
que
sinon, le compilateur est pas content. Pourtant, je voudrais m'assurer que
personne n'utilise la classe mère toute seule. Elle n'existe que pour ses
filles.
2: Par contre, j'ai beaucoup de filles qui ont des fonctions semblables :
int myPorteMonnaie(). Je voudrais donc que la mère ait cette fonction
implémentée, et que les filles en hérite, et que celle qui est pas
d'accord
la redéfinisse. Mais, comme la mère est virtuelle pure, ça marche pas
comme
ça. Donc, y-a-t'il un moyen que j'ai pas vu ? Où dois-je refaire un
héritage
non virtuel qui servirait juste aux filles pareil, qui hériteraient juste
de
cette classe temporaire ?
Le mot clé "abstract" indique que votre classe est abstraite. Donc, elle ne pourra pas être instanciée directement par du code.
Pour votre question 1, la mise en place d'un constructeur ne pose donc pas de problème puisque personne ne pourra l'appeler directement. D'ailleurs, vous pouvez faire le test en essayant instancier votre classe abstraite : à la compilation vous aurez bien une erreur vous indiquant que cela n'est pas possible.
Pour votre deuxième question, il vous suffit de mettre la méthode au niveau de la classe mère abstraite en "virtual" pour qu'elle puisse être éventuellement redéfinie plus tard. En effet, rien n'empêche de mettre des méthodes non abstraites dans une classe abstraite.
Pour conclure, vous aurez donc un code semblable à
public abstract class MyClass { public MyClass(){} virtual protected int myPorteMonnaie() { return 1; } }
public class AutreClass : MyClass { }
Ensuite, vous pourrez instancier vos 2 classes de la manière suivante :
//MyClass toto = new MyClass(); MyClass titi = new AutreClass(); AutreClass tata = new AutreClass();
Vous noterez que la première ligne en commentaire génère bien une erreur de compilation, ce qui est normal. Par contre, rien ne m'empêche instancier un objet de type AutreClass et de l'affecter dans une référence de type MyClass car je n'instancie pas dans ce cas d'objet MyClass directement mais bien une classe dérivée.
Voilà, j'espère avoir éclairé un petit peu tout ça. :)
Bye, -- David Rousset Microsoft France -------------------- Merci de bien vouloir répondre à ce message dans le newsgroup où il a été posté. Je le consulte régulièrement.
"Mathieu Chavoutier" a écrit dans le message de news:
Bonjour.
J'ai une classe virtuelle :
public abstract class MyClass { }
Et une classe fille, qui, forcément, hérite de sa mère :
public class MyFille : Myclass { }
1: Dans la classe mère, je suis obligé de mettre un constructeur, parce que sinon, le compilateur est pas content. Pourtant, je voudrais m'assurer que personne n'utilise la classe mère toute seule. Elle n'existe que pour ses filles.
2: Par contre, j'ai beaucoup de filles qui ont des fonctions semblables : int myPorteMonnaie(). Je voudrais donc que la mère ait cette fonction implémentée, et que les filles en hérite, et que celle qui est pas d'accord la redéfinisse. Mais, comme la mère est virtuelle pure, ça marche pas comme ça. Donc, y-a-t'il un moyen que j'ai pas vu ? Où dois-je refaire un héritage non virtuel qui servirait juste aux filles pareil, qui hériteraient juste de cette classe temporaire ?
Je vous remercie de toute réponse.
Mathieu Chavoutier
"Zazar" a écrit dans le message de news:u1e%
Vous avez déclaré votre classe comme étant abstraite, cela suffit.
D'accord.
> 2: Par contre, j'ai beaucoup de filles qui ont des fonctions semblables
:
> int myPorteMonnaie(). Je voudrais donc que la mère ait cette fonction > implémentée, et que les filles en hérite, et que celle qui est pas d'accord > la redéfinisse. Mais, comme la mère est virtuelle pure, ça marche pas comme
Une classe virtuelle pure, c'est une interface. Là votre classe est "seulement" abstraite.
Je ne suis pas d'accord, la par contre. Une interface est une interface. Une classe virtuelle pure est une classe qu'on ne peut pas instancier. Apres, il faut adapter les definitions au langage, et non l'inverse ;o)
> ça. Donc, y-a-t'il un moyen que j'ai pas vu ? Où dois-je refaire un héritage > non virtuel qui servirait juste aux filles pareil, qui hériteraient
juste
de > cette classe temporaire ?
La réponse d'Hervé est la bonne.
Oui, merci :o)
"Zazar" <DILAVNI.nicolas.prats@iie.cnam.fr.INVALID> a écrit dans le message
de news:u1e%23OpEaEHA.1048@tk2msftngp13.phx.gbl...
Vous avez déclaré votre classe comme étant abstraite, cela suffit.
D'accord.
> 2: Par contre, j'ai beaucoup de filles qui ont des fonctions semblables
:
> int myPorteMonnaie(). Je voudrais donc que la mère ait cette fonction
> implémentée, et que les filles en hérite, et que celle qui est pas
d'accord
> la redéfinisse. Mais, comme la mère est virtuelle pure, ça marche pas
comme
Une classe virtuelle pure, c'est une interface. Là votre classe est
"seulement" abstraite.
Je ne suis pas d'accord, la par contre. Une interface est une interface.
Une classe virtuelle pure est une classe qu'on ne peut pas instancier.
Apres, il faut adapter les definitions au langage, et non l'inverse ;o)
> ça. Donc, y-a-t'il un moyen que j'ai pas vu ? Où dois-je refaire un
héritage
> non virtuel qui servirait juste aux filles pareil, qui hériteraient
Vous avez déclaré votre classe comme étant abstraite, cela suffit.
D'accord.
> 2: Par contre, j'ai beaucoup de filles qui ont des fonctions semblables
:
> int myPorteMonnaie(). Je voudrais donc que la mère ait cette fonction > implémentée, et que les filles en hérite, et que celle qui est pas d'accord > la redéfinisse. Mais, comme la mère est virtuelle pure, ça marche pas comme
Une classe virtuelle pure, c'est une interface. Là votre classe est "seulement" abstraite.
Je ne suis pas d'accord, la par contre. Une interface est une interface. Une classe virtuelle pure est une classe qu'on ne peut pas instancier. Apres, il faut adapter les definitions au langage, et non l'inverse ;o)
> ça. Donc, y-a-t'il un moyen que j'ai pas vu ? Où dois-je refaire un héritage > non virtuel qui servirait juste aux filles pareil, qui hériteraient
juste
de > cette classe temporaire ?
La réponse d'Hervé est la bonne.
Oui, merci :o)
Mathieu Chavoutier
"David Rousset [MS]" a écrit dans le message de news:O%
Bonjour,
Le mot clé "abstract" indique que votre classe est abstraite. Donc,
elle
ne pourra pas être instanciée directement par du code.
D'accord, merci :o)
Pour votre question 1, la mise en place d'un constructeur ne pose donc pas de problème puisque personne ne pourra l'appeler directement. D'ailleurs, vous pouvez faire le test en essayant instancier votre classe abstraite : à la compilation vous aurez bien une erreur vous indiquant que cela n'est pas possible.
Effectivement, j'aurais du tester avant de poster, je m'en excuse.
Pour votre deuxième question, il vous suffit de mettre la méthode au niveau de la classe mère abstraite en "virtual" pour qu'elle puisse être éventuellement redéfinie plus tard. En effet, rien n'empêche de mettre des méthodes non abstraites dans une classe abstraite.
Oui, merci.
Pour conclure, vous aurez donc un code semblable à
public abstract class MyClass { public MyClass(){} virtual protected int myPorteMonnaie() { return 1; } }
public class AutreClass : MyClass { }
Ensuite, vous pourrez instancier vos 2 classes de la manière suivante :
//MyClass toto = new MyClass(); MyClass titi = new AutreClass(); AutreClass tata = new AutreClass();
Vous noterez que la première ligne en commentaire génère bien une erreur de compilation, ce qui est normal.
Et recherché :o)
Par contre, rien ne m'empêche instancier un objet de type AutreClass et de l'affecter dans une référence de type MyClass car je n'instancie pas dans ce cas d'objet MyClass directement
mais
bien une classe dérivée.
C'est un peu pour cela que j'utilise de l'héritage :o)
Voilà, j'espère avoir éclairé un petit peu tout ça. :)
Je vous remercie :o)
"David Rousset [MS]" <davrous@online.microsoft.com> a écrit dans le message
de news:O%230KqJLaEHA.2908@TK2MSFTNGP10.phx.gbl...
Bonjour,
Le mot clé "abstract" indique que votre classe est abstraite. Donc,
elle
ne pourra pas être instanciée directement par du code.
D'accord, merci :o)
Pour votre question 1, la mise en place d'un constructeur ne pose donc
pas de problème puisque personne ne pourra l'appeler directement.
D'ailleurs, vous pouvez faire le test en essayant instancier votre classe
abstraite : à la compilation vous aurez bien une erreur vous indiquant que
cela n'est pas possible.
Effectivement, j'aurais du tester avant de poster, je m'en excuse.
Pour votre deuxième question, il vous suffit de mettre la méthode au
niveau de la classe mère abstraite en "virtual" pour qu'elle puisse être
éventuellement redéfinie plus tard. En effet, rien n'empêche de mettre des
méthodes non abstraites dans une classe abstraite.
Oui, merci.
Pour conclure, vous aurez donc un code semblable à
public abstract class MyClass
{
public MyClass(){}
virtual protected int myPorteMonnaie()
{
return 1;
}
}
public class AutreClass : MyClass
{
}
Ensuite, vous pourrez instancier vos 2 classes de la manière suivante :
//MyClass toto = new MyClass();
MyClass titi = new AutreClass();
AutreClass tata = new AutreClass();
Vous noterez que la première ligne en commentaire génère bien une erreur
de compilation, ce qui est normal.
Et recherché :o)
Par contre, rien ne m'empêche instancier
un objet de type AutreClass et de l'affecter dans une référence de type
MyClass car je n'instancie pas dans ce cas d'objet MyClass directement
mais
bien une classe dérivée.
C'est un peu pour cela que j'utilise de l'héritage :o)
Voilà, j'espère avoir éclairé un petit peu tout ça. :)
"David Rousset [MS]" a écrit dans le message de news:O%
Bonjour,
Le mot clé "abstract" indique que votre classe est abstraite. Donc,
elle
ne pourra pas être instanciée directement par du code.
D'accord, merci :o)
Pour votre question 1, la mise en place d'un constructeur ne pose donc pas de problème puisque personne ne pourra l'appeler directement. D'ailleurs, vous pouvez faire le test en essayant instancier votre classe abstraite : à la compilation vous aurez bien une erreur vous indiquant que cela n'est pas possible.
Effectivement, j'aurais du tester avant de poster, je m'en excuse.
Pour votre deuxième question, il vous suffit de mettre la méthode au niveau de la classe mère abstraite en "virtual" pour qu'elle puisse être éventuellement redéfinie plus tard. En effet, rien n'empêche de mettre des méthodes non abstraites dans une classe abstraite.
Oui, merci.
Pour conclure, vous aurez donc un code semblable à
public abstract class MyClass { public MyClass(){} virtual protected int myPorteMonnaie() { return 1; } }
public class AutreClass : MyClass { }
Ensuite, vous pourrez instancier vos 2 classes de la manière suivante :
//MyClass toto = new MyClass(); MyClass titi = new AutreClass(); AutreClass tata = new AutreClass();
Vous noterez que la première ligne en commentaire génère bien une erreur de compilation, ce qui est normal.
Et recherché :o)
Par contre, rien ne m'empêche instancier un objet de type AutreClass et de l'affecter dans une référence de type MyClass car je n'instancie pas dans ce cas d'objet MyClass directement
mais
bien une classe dérivée.
C'est un peu pour cela que j'utilise de l'héritage :o)
Voilà, j'espère avoir éclairé un petit peu tout ça. :)