Heritage, Image, classe abstraite [Résolu]

Messages postés
467
Date d'inscription
lundi 24 juin 2002
Statut
Membre
Dernière intervention
9 mars 2011
- - Dernière réponse : kowalska
Messages postés
34
Date d'inscription
samedi 15 octobre 2005
Statut
Membre
Dernière intervention
4 janvier 2012
- 4 août 2008 à 09:00
suite à une charmante tentative d'hérité de la classe System.Drawing.Image je me retrouve confronter à un super problème :
Aucun constructeur n'est défini pour le type 'System.Drawing.Image'

Sachant que la classe Bitmap herite de image j'en conclus que c'est quelquechose de faisable

Première chose : je ne veux pas herité de la classe Bitmap pour plusieur raison la première étant que celle ci est "sealed" donc pas héritable :p la suivante étant que je veux une classe avec laquelle on puisse faire <graphics>.DrawImage(<maclasse>);
donc la seule possibilité est de "réussir" à hériter de system.drawing.image

Deuxième chose : Aucun membres de cette classe n'est declarer avec abstract donc aucun override possible sur ceux ci a la declaration (car il y en a pas)

Troisième chose : ceux qui pourraient avoir l'opportunité de répondre pourraint ils essayer de leur coté avant car j'ai tester un tres grand nombre de possibilité parmis lesquelles :
*declarer une classe vide
*avec jsute un constructeur
*avec jsute un constructeur appellant le constructeur de la classe mere
*en declarant absolument tous les membre de Image comme un bourrin histoire de voir si un pb venais pas de la
* et plein d'autre ...

l'erreur indique que pour je ne sais quelle raison le compilateur tente d'instancier la classe mere alors qu'il n'y a pas de constructeur disons de "porté suffisante"

que dire de plus, je suis a cour d'idée j'ai deja cherché avec pas mal de monde sur le chan de CS sur irc on a pas encore reussi a en venir a bout alors je me dit que peut etre qqun ici dira "bas oui c'est tout simple suffit de faire ca :"

merci encore

TeBeCo
Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
27
3
Merci
Salut,

"Sachant que la classe Bitmap herite de image j'en conclus que c'est quelquechose de faisable .."

La classe Image possède 3 constructeurs déclarés internal, c-a-d que tu ne peux dériver de cette classe uniquement dans l'assembly System.Drawing.dll ce qui est le cas de la classe Bitmap.

Les assemblys friends existent en C#, mais ça ne marchera pas dans ce sens là.. Avec la reflexion ont peut utiliser des membres private ou internal mais ça ne correspond pas non plus à ce que tu veux faire.. je ne vois pas.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 120 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Lutinore
Messages postés
467
Date d'inscription
lundi 24 juin 2002
Statut
Membre
Dernière intervention
9 mars 2011
0
Merci
j'ai essayé de répondre à la pause midi mais pour une raison que je ne connais tjs pas 90% de mes message ici passe pas :s
donc je disais a peu pres :
Je pensais que c'etait un constructeur privé a partir de la je comprenais pourquoi ca ne marchais pas alors qu'avec Bitmap ca marche, mais le coup du internal me parait tellement evident maintenant que tu le dit :p
pour ce qui est de ce que je vais faire j'ai deja une idée de comment "contourner" l'heritage même si je trouve ca limite archi pourrave d'empecher un heritage d'une classe de base comme celle la ...
merci pour tout

TeBeCo
Commenter la réponse de TeBeCo
Messages postés
467
Date d'inscription
lundi 24 juin 2002
Statut
Membre
Dernière intervention
9 mars 2011
0
Merci
a si j'ai oublié un truc a te demander tu a pensé par deduction que le constructeur était privé ou tu l'a trouvé quelque part car j'ai chercher hier et j'ai aps été fichu de trouver :s

TeBeCo
Commenter la réponse de TeBeCo
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
37
0
Merci
Ca doit surement se trouver dans la documentation.
Sinon tu peux le voir avec Reflector...

<hr />
-Blog-
Commenter la réponse de cs_Bidou
Messages postés
467
Date d'inscription
lundi 24 juin 2002
Statut
Membre
Dernière intervention
9 mars 2011
0
Merci
j'en ai bien fait le tour de la doc pas fichu de le voir, et a coté de ca j'ai pas reflector ^^
(malheur a moi :p)

TeBeCo
Commenter la réponse de TeBeCo
Messages postés
34
Date d'inscription
samedi 15 octobre 2005
Statut
Membre
Dernière intervention
4 janvier 2012
0
Merci
Bonjour à tous,

Je suis actuellement perdu sur un souci de class

Voici le code de la 1er class

public abstract class DbFactory<T>
{
protected DbConnection cnx;
protected DbProviderFactory fac;
.....
abstract protected T ReadObject(DbDataReader reader);

abstract protected void GetOrdinal(DbDataReader reader);

abstract protected string SqlFields
}

2eme Class

public class dzzStationsFactory : DbFactory<dzzStations>
{
public const string SQL_TABLE = "stations";
public const string SQL_FIELD_IDSTATION = "idstation";
public const string SQL_IDSTATION = SQL_TABLE + "." + SQL_FIELD_IDSTATION;
...

protected override void GetOrdinal(IDataReader reader)
{
if(posIdstation == -1)
{
posIdstation = reader.GetOrdinal(SQL_FIELD_IDSTATION);
posFkIdenseigne = reader.GetOrdinal(SQL_FIELD_FK_IDENSEIGNE);
posFkIdreseau = reader.GetOrdinal(SQL_FIELD_FK_IDRESEAU);
posFkIdsecteur = reader.GetOrdinal(SQL_FIELD_FK_IDSECTEUR);
posCodeImplant = reader.GetOrdinal(SQL_FIELD_CODE_IMPLANT);
posNomStation = reader.GetOrdinal(SQL_FIELD_NOM_STATION);
posTypeStation = reader.GetOrdinal(SQL_FIELD_TYPE_STATION);
posAdrCp = reader.GetOrdinal(SQL_FIELD_ADR_CP);
posAdrVoie = reader.GetOrdinal(SQL_FIELD_ADR_VOIE);
posAdrVille = reader.GetOrdinal(SQL_FIELD_ADR_VILLE);
posAdrRegion = reader.GetOrdinal(SQL_FIELD_ADR_REGION);
posNomGerant = reader.GetOrdinal(SQL_FIELD_NOM_GERANT);
posTel = reader.GetOrdinal(SQL_FIELD_TEL);
posFax = reader.GetOrdinal(SQL_FIELD_FAX);
posCourriel = reader.GetOrdinal(SQL_FIELD_COURRIEL);
posFlagSupp = reader.GetOrdinal(SQL_FIELD_FLAG_SUPP);
posNomCsm = reader.GetOrdinal(SQL_FIELD_NOM_CSM);
posTelFixCsm = reader.GetOrdinal(SQL_FIELD_TEL_FIX_CSM);
posTelPortCsm = reader.GetOrdinal(SQL_FIELD_TEL_PORT_CSM);
posCommentaires = reader.GetOrdinal(SQL_FIELD_COMMENTAIRES);
posCreePar = reader.GetOrdinal(SQL_FIELD_CREE_PAR);
posModifiePar = reader.GetOrdinal(SQL_FIELD_MODIFIE_PAR);
posCreeLe = reader.GetOrdinal(SQL_FIELD_CREE_LE);
posModifieLe = reader.GetOrdinal(SQL_FIELD_MODIFIE_LE);
}
}
}

Et voici l'erreur

'dzzStationsFactory.GetOrdinal(): aucune méthode appropriée n'a été trouvé pour la subtitution

et

'dzzStationsFactory' n'implemente pas le membre abstract hérité DbFactory.<dzzStations>.GetOrdinal


Si vous pouviez m'aider sur ce petit soucis. merci d'avance.
Commenter la réponse de kowalska