Probleme bei Vererbung
-
Hallo liebe Community,
ich stehe momentan vor einem recht verwirrenden Problem.
Ich entwickel eine kleine Klasse....sozusagen eine Funktionssammlung.
Nun habe ich probleme, was die vererbung angeht, da ich dort leider nicht so bewandert bin, wie ich es gern hätte.
Um auf den Punkt zu kommen.Ich möchte eine Oberklasse "Database" haben...von der die Unterklassen SQL und MySQL jeweils erben
Da die Funktionen die ich dort verwende den gleichen aufbau haben und auch die membervariablen die selben Inhalte haben, würde ich funktionen, wie Verbindung aufbauen, schließen, etc alle in die oberklasse übernehmenDie klasse database wurde so deklariert:
"public ref class Database abstract : public Connect"
Ist das überhaupt richtig?
Von der klasse soll nur geerbt werden, sonst nichts.Die Klasse MySql wurde so deklariert:
public ref class MySql : public DatabaseNun...ich habe in der Oberklasse Die Member:
SqlCommand^ Command
SqlConnection^ Connection
SqlConnectionStringBuilder^ ConnectionStringBuilder
SqlDataReader^ DataReaderUnd in der Klasse MySql sollen diese Namen beibehalten werden,
jedoch andere Datentypen haben
(Inhaltlich unterscheiden sich die Datentypen nicht! nur der name!)MySqlCommand^ Command
MySqlConnection^ Connection
MySqlConnectionStringBuilder^ ConnectionStringBuilder
MySqlDataReader^ DataReaderGibt es also eine Möglichkeit die oberklassenmember zu überschreiben bzw nicht mitzuerben oder derartiges?
Mit einfacher Deklaration vonMySqlCommand^ Command
MySqlConnection^ Connection
MySqlConnectionStringBuilder^ ConnectionStringBuilder
MySqlDataReader^ DataReaderin der unterklasse funktionierts nicht...Null-Reference-Exception, wenn ich z.b. das property "ConnectionString" zuweisen will
Hiiiilfe
-
Wenn ich das richtig verstanden habe, möchtest Du eine Basis Klasse die allgemein für die DB Anbindung ist. Dann erbt eine SQL Klasse und eine MySQL Klass davon und implementiert die jeweiligen konkrete Anbindung der DB.
Jetzt verwendest Du in der Oberklasse (Database) die SQL- spezifischen Klassen. Das kann dann nicht gut gehen, es ist nicht allgemein.
Du könntest in der Oberklasse die zugehörigen Interfaces als Member haben.
z.B. anstelle des SqlCommand Objekts ein IDbCommand Objekt. Dann kannst Du in der spezialisierten Klassen die korrekte "Command" Klasse instanzieren.Ok?
Gruss Simon
-
Das Problem ist ja.
Dass die beiden Klassen für SQL und MySQL jeweils die selbe Struktur haben
Die SQL benutzt System.Data.SqlClient und die MySql ist aus ner DLL MySql::Data::MySqlClient
Die Member dieser jeweiligen objekte sind halt immer gleich...unterscheiden sich halt nur vom Namen.
Oder muss ich für jede Unterklasse die member mit Copy/Paste rüberkloppen?