2009-08-06 13 views
0

Wie kann ich einen Verweis auf eine TYPE machen, damit ich später myreference Name In seiner einfachsten Form verwenden können ... ...Ihre eigene Art Definieren basierend auf vorhandenen Typ

MyInt - abgeleitet von int

Dann würde ich mich anderswo auf MyInt beziehen. Der Kicker ist, dass ich dieses "#define" innerhalb einer Klassendefinition brauche, die unterklassifiziert wäre und ein anderer Typ sein könnte. Die eigentliche Absicht ist

MyTypeSQLCmd = OleDbCommand 
OR 
MyTypeSQLCmd = SQLiteCommand 

und meine Unterklasse verweist nur auf, und in der Lage eine neue MyTypeSQLCmd zu erstellen();

--- lassen Sie mich ein wenig mehr ausarbeiten.

Ich habe eine Klasse, die eine Verbindung zu einer OleDB-Datenbank herstellt. Ich habe eine andere Klasse, die eine Verbindung zu einer SQLite-Datenbank herstellen.

Ich habe eine andere Klasse, die entweder aus dem oben genannten abgeleitet wird, aber zusätzliche Funktionen haben wird. Anstatt also das zurück-Ende zu wissen, ich verbinden, ich will nicht IFs hat alle über den Ort wie ...

if(connectingToSQLite) 
    MyCmd = new SQLiteCommand(); 
else 
    MyCmd = new OleDbCommand(); 

da anschließend die üblichen Methoden zur Verfügung, die ich brauche, ist die gleiche Referenzen, wie

MyCmd.Parameters.Add (...)

so kann ich die Variable als ein "Typ" nicht oder anderen wie

OleDbCommand MyCmd vorab erklären; SQLiteCommand MyCmd;

Ich möchte nur eine Instanz, also hatte ich gehofft, eine Art "Alias" -Typ zu bekommen, der akzeptiert würde und ohne Compilerfehler weitermachen würde.

Antwort

2

sind nicht wirklich Sie für eine Schnittstelle suchen, dh IDbCommand

+0

um bis der Vererbungskette „auf Go to Definition“ zu verwenden, bedeutet, ich glaube, ich sehe, was Sie meinen, und denken, dass funktioniert. .. Ich werde Flagge, wenn erfolgreich. – DRapp

1

Sie können entweder davon erben oder die using-Anweisung verwenden.

using SomeClass = SomeOtherClass; 
1

Verwendung Generika:

class SubClass<MyTypeSQLCmd> where MyTypeSQLCmd : IDbCommand, new { 
    ... 
} 

Nun ist die Klasse kann Instanzen des Typs erstellen, und verwenden Sie alle Methoden in der IDbCommand Schnittstelle. Sie können Instanzen der Klasse für alle Datenbankbefehlstypen erstellen.

+0

+1, funktioniert dieser Ansatz gut. Ich benutze es auch ... – Steve

0

Wenn Sie etwas suchen, das einem C typedef ähnlich ist, dann ist es zwar mit einer using Aussage am Anfang der Datei möglich, aber es ist im Allgemeinen nicht die ideale Lösung. Die Idee für solche Situationen ist, "auf die Schnittstelle zu programmieren". Sie finden nämlich eine Oberklasse oder Schnittstelle, die die gesuchte Funktionalität implementiert (in diesem Fall entweder System.Data.Common.DbCommand oder System.Data.IDbCommand) und dagegen programmieren. Sie dann instanziiert eine konkretere Art (wie SqlCommand oder OleDbCommand, die die besondere Implementierung.

Verwandte Themen