Blogs CodeS-SourceS

Blogs, blogs, blogs et encore des blogs ! Ici les développeurs vous font
partager leurs expériences, trouvailles mais également des informations funs.
Bref la vie de tous les jours des développeurs pas forcément braqués sur du code !

Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide
dans Rechercher

Aleks's Blog

Un framework pour les dominer tous

Question de C#

Alors voici un code qui ne compile pas (je suis gentil je vous donne la solution avant :D)

public class Heritable
{
      public Heritable(int argument1)
      {}
}

public class Heriteur : Heritable
{
     
public Heriteur()
      {}
}

Alors maintenant la question c'est "Pourquoi ca ne compile pas" ?
j'ai eu du mal à l'expliquer à mes collègues aujourd'hui (n'est ce pas Guillaume :p) alors je vous pose la question :)

Publié mardi 11 mai 2004 19:32 par Aleks
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires

 

Aleks a dit :

C'est pourtant simple.

Si on déclare un constructeur pour une classe, le compilateur ne va pas génerer de constructeur "vide".

Et vu que écrire :

public Heriteur {
}

équivaut à :

public Heriteur : base() {
}

Forcément, il ne trouve pas de constructeur sans parametres dans la classe mère. Donc erreur.
mai 11, 2004 20:17
 

Aleks a dit :

D'ailleur il est à noter que pour n'importe quelle declaration du constructeur le constructeur de la classe mere appelé est base(), il faut donc appeler explicitement base(un entier) dans ton exemple meme si le constructeur de Heriteur est implémenter comme suit : Heriteur(int argument)
mai 11, 2004 20:44
 

Aleks a dit :

Oui vous avez tous deus raisons la bonne synthaxe est :

public class Heriteur : Heritable
{
public Heriteur(int argument1):base(argument1)
{}
}

Tout ça pour dire que c'est assez chiant ce genre de situation lorsque l'on hérite d'une classe mais que l'on veut créer son propore constructeur (qu'on a pas besoin de argument1 par exemple)
mai 11, 2004 23:12
 

Aleks a dit :

Non ce n'est pas chiant, encore heureux que ce soit comme cela.
Mais s'encombrer d'un paramètre n'est pas nécessaire si on le sait inutile :

public Heriteur() : base(0) {
}

mai 12, 2004 00:07
 

Aleks a dit :

Le truc c'est que généralement si le constructeur demande un paramètre c'est que l'objet en a besoin ...
mai 12, 2004 09:35
 

Aleks a dit :

Alors la question n'a pas de sens.
Pourquoi dériver d'une classe qui a un constructeur qui attend un parametre dont elle a besoin, en ne mettant pas de constructeur dans la classe fille.
mai 12, 2004 09:43
 

Aleks a dit :

Bon j'avais trouvé (l'onjet restant l'objet, c'est grace à Java) mais trop tard ...
mai 12, 2004 10:41
 

Aleks a dit :

Ca peut avoir un sens quand tu souhaites totalement redévelopper un classe à ta sauce mais avec comme but que ce soit transparent pour l'utilisateur.
Imagine tu refais t'as une classe Socket en overridant toutes les méthodes mais tu veux que, dans le code qui utilise la Socket, la seule qui y ai à remplacer soit:
Socket s = new Socket();
par Socket s = new MySocket();
mai 12, 2004 11:35
 

Aleks a dit :

Et donc ?
ton exemple Socket() à un constructeur sans paramètres.
mai 12, 2004 18:38
 

Aleks a dit :

Oui mais justement le problème c'est que Socket n'a qu'un constructeur qui prend 3 paramètres ...
mai 12, 2004 19:44
 

Aleks a dit :

Et bien justement, il n'y a aucune raison de faire un constructeur sans parametres qui n'appelle pas le constructeur de base !
mai 12, 2004 20:00
 

Aleks a dit :

class A
{
public A(int x, int y, string s)
{
Console.Write(x);
Console.Write(y);
Console.Write(s);
}
}

class T: A
{
public T(): this(0, 0, "Rien") {}
public T(int x, int y): this(x, y, "Rien") {}
public T(int x, int y, string s):base(x,y,s) {
}
}

C'est simple non ;)
mai 13, 2004 02:41
 

Aleks a dit :

Oui c'est exactement ce que j'ai fait mais en mettant le constructeur "obligatoire" en private comme ça si on instancie ma classe on ne le voit pas.
Je sais c'est crade mais bon ...

Je peux pas vous expliquer pourquoi je dois faire ça (c'est dans le cadre de mon boulo et c'est un peu confidentiel) mais Evain JB, crois moi, c'est ce que je dois faire :D
mai 13, 2004 09:31
 

Aleks a dit :

De plus on peut restreindre le constructeur de la classe en obligeant les gens l'utilisant à prendre des paramètres fixes qu'ils ne verront bas.
juillet 8, 2004 13:10
 

Aleks a dit :

En C++ tu peux mettre une valeur par défaut à chaque champ de ton constructeur.

ex : Heritable(int argument1 = 0)

Comme ça tu as à la fois ton constructeur par défaut et ton constructeur avec argument :p

Et pour info je suis d'accord avec Aleks que c'est chiant de devoir brancher toute la tuyauterie à chaque fois, ou d'écrire 10000 constructeur quand on peut le faire en une seule ligne comme en C++.

C con kyzè pas pensé à coller ça dans C# :(

septembre 15, 2004 18:48
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Etendre le Team Web Access de TFS 2012 – Step 0 par Philippe Didiergeorges Aka Philess le il y a 1 heure et 37 minutes

- Simuler facilement l’envoi de mail par Blog de Jérémy Jeanson le 05-22-2013, 12:52

- ProcDump 6.0 : support du filtrage sur messages d'exceptions .NET, des filtres multiples et du ciblage par nom de service par CoqBlog le 05-20-2013, 14:50

- Votez pour le TOP 10 des influenceurs SharePoint francophones ! par Le blog de Patrick [MVP SharePoint] le 05-20-2013, 12:59

- [Conf’SharePoint] Dernier rappel ! :-) par Le blog de Patrick [MVP SharePoint] le 05-20-2013, 09:09

- [ #SharePoint 2013 ] les modèles de sites standards… par Le blog de Patrick [MVP SharePoint] le 05-20-2013, 09:03

- 10 erreurs de compréhension concernant SharePoint… par Le blog de Patrick [MVP SharePoint] le 05-20-2013, 08:27

- Conf’SharePoint : 10 bonnes raisons pour ne pas la rater par Le petit blog de Pierre / Pierre's little blog le 05-14-2013, 02:24

- [Event] Soirée de lancement Agile .NET France à Lyon par Blog Agile/ALM de Vincent THAVONEKHAM le 05-13-2013, 01:29

- .NET / Debug : inspection de la mémoire d'applications .NET (dump ou processus live) : première livraison d'une librairie .NET par Microsoft par CoqBlog le 05-11-2013, 22:21


Propulsé par Community Server (Personal Edition), par Telligent Systems
Chargement...