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 übernehmen

    Die 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 Database

    Nun...ich habe in der Oberklasse Die Member:
    SqlCommand^ Command
    SqlConnection^ Connection
    SqlConnectionStringBuilder^ ConnectionStringBuilder
    SqlDataReader^ DataReader

    Und 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^ DataReader

    Gibt es also eine Möglichkeit die oberklassenmember zu überschreiben bzw nicht mitzuerben oder derartiges?
    Mit einfacher Deklaration von

    MySqlCommand^ Command
    MySqlConnection^ Connection
    MySqlConnectionStringBuilder^ ConnectionStringBuilder
    MySqlDataReader^ DataReader

    in 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?


Anmelden zum Antworten