2009-05-28 2 views
2

Ich arbeite mit SqlConnection und AdomdConnection Objekte in C#.Ist es möglich, zwei ähnliche Klassenfunktionen in einer Klasse in C# zu verpacken?

SqlConnection besteht aus: DbConnection, ICloneable.

AdomdConnection besteht aus: Komponente, IDbConnection, IDisposable, ICloneable.

Ich hoffte, ich könnte eine gemeinsame Schnittstelle oder einen Klassen-Typ verwenden, um herumzugehen, aber das scheint keine Option zu sein, weil sie keinen gemeinsamen Typ teilen, den ich sagen kann.

Sie haben beide ähnliche Methoden, die ich aufrufen muss, aber da ich etwas Logik schreiben werde, um sie für entweder zu nennen, wollte ich sie in ihre eigene Klasse einwickeln und dann nur diese Klasse anrufen und sich um den Grund kümmern Art.

Anfangs dachte ich, ich so etwas wie dies nutzen könnten:

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(); } 
    } 
} 

Aber ich kann nicht helfen, aber frage mich, dass es keinen besseren Weg, es zu tun ist.

Ich stieß auf die TypeMap-Klasse (siehe Frage 298976), die eine bessere Lesbarkeit bieten würde, aber ich konnte nicht herausfinden, wie man die Rückgabewerte verwendet, aber ich frage mich, ob es einen besseren Weg gibt es zu tun.

+0

Sieht aus wie etwas, das man mit Generika lösen könnte. – workmad3

+0

Aber Sie müssen nicht, da beide Connection Classes bereits dieselben Interfaces implementieren. –

Antwort

11

Verwenden Sie IDbConnection - das ist beiden Typen gemeinsam.

SqlConnection erbt von DbConnection, die ihrerseits die IDbConnection Schnittstelle implementiert. Diese Schnittstelle wird auch von AdomdConnection implementiert.

Daher können Sie die IDbConnection Schnittstelle verwenden beide Typen darzustellen

+0

Um diese korrekte Antwort für das OP auszufüllen, erbt SqlConnection von der abstrakten Klasse DBConnection, die IDbConnection implementiert. –

+0

Danke an alle für Antworten - nur aus Interesse, wenn es keine gemeinsame Schnittstelle gab, die bestanden werden konnte, aber es gab übliche Methoden, wie konnte das verpackt werden? –

+0

Sie würden es auf die gleiche Weise verpacken, wie Sie es in Ihrer Frage gezeigt haben. –

2

SqlConnection aus aufgebaut ist: DbConnection, ICloneable.

Ja, es ist, aber DBConnection selbst erweitert und implementiert Component, IDbConnection, IDisposable

So Sie beide Objekte als IDbConnection umgehen konnte

Verwandte Themen