Heritage, Image, classe abstraite [Résolu]

TeBeCo 467 Messages postés lundi 24 juin 2002Date d'inscription 9 mars 2011 Dernière intervention - 19 août 2007 à 23:16 - Dernière réponse : kowalska 34 Messages postés samedi 15 octobre 2005Date d'inscription 4 janvier 2012 Dernière intervention
- 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 

Votre réponse

6 réponses

Meilleure réponse
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 20 août 2007 à 06:38
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.

Merci Lutinore 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 91 internautes ce mois-ci

Commenter la réponse de Lutinore
TeBeCo 467 Messages postés lundi 24 juin 2002Date d'inscription 9 mars 2011 Dernière intervention - 20 août 2007 à 18:07
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
TeBeCo 467 Messages postés lundi 24 juin 2002Date d'inscription 9 mars 2011 Dernière intervention - 20 août 2007 à 18:08
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
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 20 août 2007 à 19:05
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
TeBeCo 467 Messages postés lundi 24 juin 2002Date d'inscription 9 mars 2011 Dernière intervention - 20 août 2007 à 20:21
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
kowalska 34 Messages postés samedi 15 octobre 2005Date d'inscription 4 janvier 2012 Dernière intervention - 4 août 2008 à 09:00
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.