2009-02-04 8 views
10

Salut à tous,Méthode retour d'une interface

Je pense à cette ligne de code

IDataReader myReader = questDatabase.ExecuteReader(getQuest); 

J'utilise DAAB mais je ne peux pas comprendre comment et quel est le sens de la En fait, la méthode ExecuteReader (DbCommand) renvoie une interface IDataReader.

Tout le monde peut expliquer, S'il vous plaît

+0

Je interfaces d'apprentissage et avait la même question. La réponse de Pablito était exactement ce que je cherchais et a confirmé que je construisais ma mise en œuvre correctement. Merci les gars!! –

Répondre

15

Il vous permet de vous DataReader sans avoir besoin de savoir quel type de DataReader vous utilisez (par exemple SqlDataReader, OleDbDataReader, EtcDataReader), donc si un jour vous voulez changer le lecteur de données que vous utilisez, cela n'aura pas d'impact sur votre logique, en d'autres termes ça vous donne l'abstraction. Par exemple:

vous pouvez utiliser

IDbCommand command = GiveMeSomeCommand(); 
IDataReader r = command.ExecuteReader(); 

sans savoir quel fournisseur vous utilisez

il peut être:

private static IDbCommand GiveMeSomeCommand() 
{ 
    return new OleDbCommand(); 
} 

ou il peut être

private static IDbCommand GiveMeSomeCommand() 
{ 
    return new SqlCommand(); 
} 

ou autre.

EDIT:

Vous pouvez également utiliser les DBFactories.

DbProviderFactory factory = GiveMeSomeFactory(); 
IDbCommand command = factory.CreateCommand(); 
IDataReader r = command.ExecuteReader(); 

//and create more objects 
IDataAdapter adapter = factory.CreateDataAdapter(); 
IDbConnection conn = factory.CreateConnection(); 

puis créez votre fournisseur dans une autre couche

private DbProviderFactory GiveMeSomeFactory() 
{ 
    if(something) 
     return SqlClientFactory.Instance; 
    else if(somethingElse) 
     return OracleFactory.Instance; 
    else if(notThisAndNotThat) 
     return MySqlFactory.Instance; 
    else 
     return WhateverFactory.Instance; 

} 
+2

Je vous remercie vraiment TOUS, je suis surprenant dans votre dévouement, il est grat pour être dans une telle communauté Merci à tous – netseng

4

Il retourne une interface, car la mise en œuvre de l'interface est pas importante, juste l'API que l'interface fournit.

+0

Je vous remercie vraiment tous, je suis surprenant dans votre dévouement, c'est grat pour être dans une communauté comme celle-ci. Merci à tous – netseng

3

« Renvoie une interface » signifie vraiment: « Retourne une instance d'une classe qui implémente cette interface »

Dans ce cas, il retourne un objet très similaire à un objet SqlDataReader, qui vous permet d'exécuter des méthodes telles que .Lire() et implémente les interfaces IDisposable et IDataRecord.

+0

Je vous remercie vraiment TOUS, je suis surprenant dans votre dévouement, C'est grat pour être dans une communauté comme celle-ci. Merci Tous – netseng

+0

est-ce un concept similaire au polymorphisme (ie un pointeur d'objet peut pointer vers tout type de référence qui hérite de l'objet? – iliketocode

2

Il ne retourne pas une interface en soi, mais un objet qui prend en charge cette interface.

+0

-je vraiment vous remercie tous, je suis surprenant dans votre dévouement, il est grat d'être dans une comunauté comme celui-ci. Merci Tous – netseng

6

La méthode renvoie un objet, qui est une instance d'une classe, et ce type de classe prend en charge IDataReader. Le point est, le type de l'objet n'est pas important, juste le fait que la classe implémente l'interface.

Si vous conduisez une voiture, vous n'avez pas besoin de savoir s'il s'agit d'un gué, ou d'un toyota, vous conduisez la voiture de la même manière.

L'interface de conduite est la même, une fois que la voiture prend en charge l'interface, vous pouvez le conduire. Idem avec l'IDataReader, une fois que la classe retournée supporte l'interface, vous pouvez l'utiliser.

+0

Merci Tous, Il est génial d'être dans une comunauté comme ça – netseng

2

Il retourne un objet qui implémente cette interface particulière, et c'est tout ce qui vous intéresse vraiment. L'objet "est un" IDataReader et peut exécuter toutes les méthodes d'IDataReader.

+0

je vraiment vous remercie tous, je suis surprenant dans votre dévouement, il est grat d'être dans une comunauté comme ça. Merci Tous – netseng

+0

C'est ce que j'aime à propos de StackOverflow: p – random

Questions connexes