Problème de cast

Le
MistigriS
Bonjour,

J'ai créé une classe CMyField qui dérive de DataColumn.

Lorsque j'essaie d'initialiser ma variable en la "castant" grâce à une
variable du type DataColumn, mon programme plante (cast invalid)
myField = (CMyField) col;

Si une âme charitable pouvait m'expliquer pourquoi.

Merci d'avance
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Merlin
Le #12279481
il faudrait voir les déclarations pour t'aider

--

///\3rL1n____
MistigriS
Le #12279461
Dans le fichier contenant ma classe derivé il y a juste:

public class CField : System.Data.DataColumn
{

public CField()
{
}

public int MaFonction
{
return 0;
}
}

Dans le fichier principal:
private void test()
{
OleDbConnection conn = new OleDbConnection(connStr);
conn.Open();
string str = "SELECT * FROM Personne";
OleDbDataAdapter da1 = new OleDbDataAdapter(str, conn);
DataSet ds1 = new DataSet("Heading");
da1.Fill(ds1, "Heading");

DataColumn col = ds1.Tables[0].Columns[0];

// et la ca plante
CMyField myField = (CMyField) col;
}

J'ai également essayé de faire sans résultat
CMyField myField = new CMyField;
myField = (CMyField) col;

Voila... et merci.
Der§en
Le #12279441
Salut Merlin,

Je ne désespère pas de trouver ton book dans chez Eyrolles un jour :o)))

Der§en.


"Merlin"
il faudrait voir les déclarations pour t'aider

--

///\3rL1n____




Merlin
Le #12279421
> Je ne désespère pas de trouver ton book dans chez Eyrolles un jour :o)))



il part à l'impression lundi matin, je viens de signer le BAT ...

--

///\3rL1n____
Merlin
Le #12279411
> // et la ca plante
CMyField myField = (CMyField) col;




ah ben voui ! là je comprends mieux :-)

C'est pas possible ton affaire, tu voudrais faire de l'héritage à
l'envers :-)

La colonne c'est un DataColumn par un CMyField, tu pourrais caster un
CMyField en DataColumn, là oui ça serait possible, mais pas
l'inverse...

--

///\3rL1n____
MistigriS
Le #12279391
> La colonne c'est un DataColumn par un CMyField, tu pourrais caster un
CMyField en DataColumn, là oui ça serait possible, mais pas
l'inverse...



Dans ce cas, sachant que CMyField est ma classe fille dérivant de
DataComumn, comment puis-je m’en sortir pour en initialiser cette variable
reprenant toutes les valeurs de la variable ‘col’ (de type DataComumn) ?

Merci
Der§en
Le #12279371
Merci pour l'info, j'ai eu un peur que la mise en vente de Delphi annule ton
book....

Der§en.


"Merlin"
Je ne désespère pas de trouver ton book dans chez Eyrolles un jour :o)))



il part à l'impression lundi matin, je viens de signer le BAT ...

--

///\3rL1n____




Paul Bacelar
Le #12279351
"MistigriS" news:
La colonne c'est un DataColumn par un CMyField, tu pourrais caster un
CMyField en DataColumn, là oui ça serait possible, mais pas
l'inverse...



Dans ce cas, sachant que CMyField est ma classe fille dérivant de
DataComumn, comment puis-je m'en sortir pour en initialiser cette variable
reprenant toutes les valeurs de la variable 'col' (de type DataComumn) ?

Merci




Si l'on en croit le message d'erreur, c'est " (obj as
mshtml.IHTMLInputImage);" qui pose problème.

Le problème arrive en Debug ?



Le plus simple est d'implémenter un operator de cast dans CMyField.



<CODE>

public class CMyField : System.Data.DataColumn
{

CMyField(System.Data.DataColumn dc)

{

....

....

....

}



public static explicit operator CMyField(System.Data.DataColumn dc) {
return new CMyField(dc);
}
}

</CODE>



Mais je pense que vous devriez vous penchez sur le DesignPatten Decorator.

http://www.dofactory.com/Patterns/PatternDecorator.aspx

Il est peut-être un peu overkill, mais si votre exemple n'est qu'une
simplification de votre vrai problème, il peut vous être for utile.

Si vous avez de difficultés, exposez votre problème initial pour que l'on
trouve une solution adaptée.
--
Paul Bacelar
MVP VC++
Merlin
Le #12279311
> Merci pour l'info, j'ai eu un peur que la mise en vente de Delphi annule ton
book....



non, car dans l'esprit le book c'est "De Delphi à C#", avec un cours
"c# expliqué aux utilisateurs Delphi" et la majorité des exemples
traités dans les 2 langages.
Le principal du livre était terminé depuis juin, ce n'est donc pas à
dessein à cause de la vente des IDE Borland, juste une bonne intuition
sur la voie à suivre pour les développeurs Delphi...

Je dirais qu'en fait la situation est même profitable au livre. Faire
un livre sur BDS 2006 qui est en framework 1.1 alors que MS a sorti
tout un tas de choses en .NET dont des EDI gratuits superbes, les
ventes de BDS 2006 vont être encore pire que celles de BDS 2005 à mon
avis. Ce qui bien entendu est très mauvais pour un bouquin accroché à
la version de l'EDI.
En revanche, comme l'esprit du livre c'est de permettre aux
développeurs Delphi de passer à C# facilement, il se trouve que la
situation donne raison à ma vision des choses et que cela pourrait
intéresser potentiellement beaucoup plus de lecteurs, comme ceux qui se
fichent de BDS2006 mais qui voudraient comprendre C# expliqué à partir
de Delphi.

On verra comment le livre sera perçu par les lecteurs, ce sont eux qui
tranchent in fine de toute façon ...

--

///\3rL1n____
MistigriS
Le #12279301
> Le plus simple est d'implémenter un operator de cast dans CMyField.



public static explicit operator CMyField(System.Data.DataColumn dc) {
return new CMyField(dc);
}



oui mais ca me donnait une erreur de compilation

Mais je pense que vous devriez vous penchez sur le DesignPatten Decorator.
http://www.dofactory.com/Patterns/PatternDecorator.aspx



c'est ce que je viens de faire et ca m'a remis les idées en place.
Ce que j'essayais marche maintenant comme je voulais

Merci beaucoup à vous deux
Publicité
Poster une réponse
Anonyme