( et fin je l'espère ) !
J'ai peut être mal posé ma question !
Suis ok sur le principe qu'une interface est un contrat, qui ne fournit pas
d'implémentation .... ( ça on le trouve dans toutes les docs ! )
Mais la ou je ne pige pas, c'est que je pensais qu'on ne pouvait pas utiliser
directement une interface ( comme une classe ) et qu'il fallait nécessairement
créer une classe qui implémente l'interface !!!!
Et bien ce n'est pas le cas du tout !! Si je reprends mon exemple
Idatareader, et bien :
Dim DtRead as SqlDatareader ou Dim DtRead as Idatareader
et bien mon code fonctionne et produit le même résultat --> ce qui signifie
qu'on
peut directement utiliser une interface ou alors c'est un raccourci proposé
par VS ??
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Julien Bakmezdjian [MS]
Bonjour,
Effectivement, au moment de la déclaration, pas beaucoup de différence... En revanche, vous ne pourrez jamais instancier un objet avec une interface : DtRead = New IDataReader n'a absolument aucun sens, puisque le code de la méthode Read par exemple n'existe pas dans Idatareader !
En revanche : Dim DtRead as IDataReader DtRead = New SqlDataReader est correct.
En effet, DtRead est déclaré comme une interface. Nous savons donc que DtRead a une méthode Read. Et effectivement, nous affectons à DtRead un objet implémentant IDataReader (voir la documentation) et donc la méthode Read.
Voici un exemple qui montre l'intérêt des interfaces :
Si je crée une fonction AfficheEnregistrements :
Sub AfficheEnregistrements(reader as IDataReader) While reader.Read() ' . . . End While End Sub
Cette fonction prend en entrée un IDataReader sur lequel je peux appeler la méthode Read... Pas d'erreur puisque Read existe bien au sein de IDataReader. Si maintenant j'utilise cette fonction (ou si je la fournie à quelqu'un), je peux l'utiliser avec un objet SqlDataReader ou un objet OleDbDataReader... le même code fonctionnera indifféremment puisque SqlDataReader et OleDbDataReader implémentent tout deux IDataReader.
J'espère avoir été clair,
Cordialement,
Julien Bakmezdjian
"JO" a écrit dans le message de news:
( et fin je l'espère ) ! J'ai peut être mal posé ma question ! Suis ok sur le principe qu'une interface est un contrat, qui ne fournit pas d'implémentation .... ( ça on le trouve dans toutes les docs ! ) Mais la ou je ne pige pas, c'est que je pensais qu'on ne pouvait pas utiliser directement une interface ( comme une classe ) et qu'il fallait nécessairement créer une classe qui implémente l'interface !!!!
Et bien ce n'est pas le cas du tout !! Si je reprends mon exemple Idatareader, et bien :
Dim DtRead as SqlDatareader ou Dim DtRead as Idatareader
et bien mon code fonctionne et produit le même résultat --> ce qui signifie qu'on peut directement utiliser une interface ou alors c'est un raccourci proposé par VS ??
Help Me
Merci encore
Jo
on peut l'utiliser en .NET directement
Bonjour,
Effectivement, au moment de la déclaration, pas beaucoup de différence...
En revanche, vous ne pourrez jamais instancier un objet avec une interface :
DtRead = New IDataReader
n'a absolument aucun sens, puisque le code de la méthode Read par exemple
n'existe pas dans Idatareader !
En revanche :
Dim DtRead as IDataReader
DtRead = New SqlDataReader
est correct.
En effet, DtRead est déclaré comme une interface. Nous savons donc que
DtRead a une méthode Read. Et effectivement, nous affectons à DtRead un
objet implémentant IDataReader (voir la documentation) et donc la méthode
Read.
Voici un exemple qui montre l'intérêt des interfaces :
Si je crée une fonction AfficheEnregistrements :
Sub AfficheEnregistrements(reader as IDataReader)
While reader.Read()
' . . .
End While
End Sub
Cette fonction prend en entrée un IDataReader sur lequel je peux appeler la
méthode Read... Pas d'erreur puisque Read existe bien au sein de
IDataReader. Si maintenant j'utilise cette fonction (ou si je la fournie à
quelqu'un), je peux l'utiliser avec un objet SqlDataReader ou un objet
OleDbDataReader... le même code fonctionnera indifféremment puisque
SqlDataReader et OleDbDataReader implémentent tout deux IDataReader.
J'espère avoir été clair,
Cordialement,
Julien Bakmezdjian
"JO" <JO@discussions.microsoft.com> a écrit dans le message de news:
A0FE8834-615C-4EA8-AD89-913D1D48E4D0@microsoft.com...
( et fin je l'espère ) !
J'ai peut être mal posé ma question !
Suis ok sur le principe qu'une interface est un contrat, qui ne fournit
pas
d'implémentation .... ( ça on le trouve dans toutes les docs ! )
Mais la ou je ne pige pas, c'est que je pensais qu'on ne pouvait pas
utiliser
directement une interface ( comme une classe ) et qu'il fallait
nécessairement
créer une classe qui implémente l'interface !!!!
Et bien ce n'est pas le cas du tout !! Si je reprends mon exemple
Idatareader, et bien :
Dim DtRead as SqlDatareader ou Dim DtRead as Idatareader
et bien mon code fonctionne et produit le même résultat --> ce qui
signifie
qu'on
peut directement utiliser une interface ou alors c'est un raccourci
proposé
par VS ??
Effectivement, au moment de la déclaration, pas beaucoup de différence... En revanche, vous ne pourrez jamais instancier un objet avec une interface : DtRead = New IDataReader n'a absolument aucun sens, puisque le code de la méthode Read par exemple n'existe pas dans Idatareader !
En revanche : Dim DtRead as IDataReader DtRead = New SqlDataReader est correct.
En effet, DtRead est déclaré comme une interface. Nous savons donc que DtRead a une méthode Read. Et effectivement, nous affectons à DtRead un objet implémentant IDataReader (voir la documentation) et donc la méthode Read.
Voici un exemple qui montre l'intérêt des interfaces :
Si je crée une fonction AfficheEnregistrements :
Sub AfficheEnregistrements(reader as IDataReader) While reader.Read() ' . . . End While End Sub
Cette fonction prend en entrée un IDataReader sur lequel je peux appeler la méthode Read... Pas d'erreur puisque Read existe bien au sein de IDataReader. Si maintenant j'utilise cette fonction (ou si je la fournie à quelqu'un), je peux l'utiliser avec un objet SqlDataReader ou un objet OleDbDataReader... le même code fonctionnera indifféremment puisque SqlDataReader et OleDbDataReader implémentent tout deux IDataReader.
J'espère avoir été clair,
Cordialement,
Julien Bakmezdjian
"JO" a écrit dans le message de news:
( et fin je l'espère ) ! J'ai peut être mal posé ma question ! Suis ok sur le principe qu'une interface est un contrat, qui ne fournit pas d'implémentation .... ( ça on le trouve dans toutes les docs ! ) Mais la ou je ne pige pas, c'est que je pensais qu'on ne pouvait pas utiliser directement une interface ( comme une classe ) et qu'il fallait nécessairement créer une classe qui implémente l'interface !!!!
Et bien ce n'est pas le cas du tout !! Si je reprends mon exemple Idatareader, et bien :
Dim DtRead as SqlDatareader ou Dim DtRead as Idatareader
et bien mon code fonctionne et produit le même résultat --> ce qui signifie qu'on peut directement utiliser une interface ou alors c'est un raccourci proposé par VS ??
Help Me
Merci encore
Jo
on peut l'utiliser en .NET directement
JO
Merci beaucoup pour la réponse !!
En fait je faisais l'amalgame entre la déclaration de type Interface et l'objet effectivement utilisé qui est de type lui SqlDatareader.
Merci encore
Merci beaucoup pour la réponse !!
En fait je faisais l'amalgame entre la déclaration de type Interface
et l'objet effectivement utilisé qui est de type lui SqlDatareader.