2009-05-28 6 views
2

Je travaille avec des objets SqlConnection et AdomdConnection en C#. SqlConnection est construit à partir de: DbConnection, ICloneable.Est-il possible d'envelopper deux fonctions de classe similaires dans une classe en C#?

AdomdConnection est construit à partir de: Component, IDbConnection, IDisposable, ICloneable. J'espérais pouvoir utiliser une interface commune ou un type de classe pour passer, mais cela ne semble pas être une option parce qu'ils ne partagent pas un type commun, que je peux dire. Ils ont tous deux des méthodes similaires que j'ai besoin d'appeler mais comme je vais écrire une certaine logique autour de les appeler pour soit je voulais les envelopper dans leur propre classe, puis juste appeler cette classe et le laisser s'inquiéter du sous-jacent type.

Au départ, je pensais que je pouvais utiliser quelque chose comme ceci:

public class ConnectionWrapper 
{ 
    protected object _Conn; 

    public ConnectionWrapper(object Conn) 
    { 
     _Conn = Conn; 
    } 

    public void Open() 
    { 
     if(_Conn is SqlConnection) { ((SqlConnection)_Conn).Open(); } 
     else if(_Conn is AdomdConnection) { ((AdomdConnection)_Conn).Open(); } 
    } 
} 

Mais je ne peux pas empêcher de se demander qu'il n'y a pas une meilleure façon de le faire.

Je suis tombé sur la classe TypeMap (voir la question 298976) qui serait plus lisible, mais je n'arrivais pas à comprendre comment utiliser les valeurs de retour, mais je me demande encore s'il y a une meilleure façon pour le faire.

+0

On dirait quelque chose que vous pouvez résoudre avec les génériques. – workmad3

+0

Mais vous n'avez pas besoin car les deux classes de connexion implémentent déjà les mêmes interfaces. –

Répondre

11

Utilisez IDbConnection - ce qui est commun aux deux types.

SqlConnection hérite de DbConnection qui à son tour implémente l'interface IDbConnection. Cette interface est également implémentée par AdomdConnection.

Par conséquent, vous pouvez utiliser l'interface IDbConnection pour représenter les deux types

+0

Juste pour donner la bonne réponse à l'OP, SqlConnection hérite de la classe abstraite DBConnection qui implémente IDbConnection. –

+0

Merci à tous pour les réponses - Juste par intérêt, s'il n'y avait pas une interface commune qui pourrait passer, mais il y avait des méthodes communes comment cela pourrait-il être enveloppé? –

+0

Vous l'emballeriez beaucoup de la même manière que vous l'avez montré dans votre question. –

2

SqlConnection est construit à partir de: DbConnection, ICloneable.

Oui, il est, mais DBConnection se prolonge et met en œuvre Component, IDbConnection, IDisposable

Ainsi, vous pouvez gérer à la fois des objets comme IDbConnection

Questions connexes