Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème de cast

16 réponses
Avatar
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

10 réponses

1 2
Avatar
Merlin
il faudrait voir les déclarations pour t'aider

--

///3rL1n____
Avatar
MistigriS
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.
Avatar
Der§en
Salut Merlin,

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

Der§en.


"Merlin" a écrit dans le message de news:

il faudrait voir les déclarations pour t'aider

--

///3rL1n____




Avatar
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____
Avatar
Merlin
> // 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____
Avatar
MistigriS
> 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
Avatar
Der§en
Merci pour l'info, j'ai eu un peur que la mise en vente de Delphi annule ton
book....

Der§en.


"Merlin" a écrit dans le message de news:

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____




Avatar
Paul Bacelar
"MistigriS" wrote in message
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++
Avatar
Merlin
> 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____
Avatar
MistigriS
> 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
1 2