Klasa i metoda abstrakcyjna, dziedziczenie problem :/

0

Witam mam taki kawałek kodu (przykładowy):

 
 public abstract class DataBaseConfig
    {
        private string dbAddress { get; set; }
        private int dbPortDefault { get; set; }
        private string dbLogin { get; set; }
        private string dbPass { get; set; }
        private bool connStat { get; set; }
        private string connString { get; set; }

        public abstract void Connect();                     //Abstrakcyjna metoda do zaimplementowania

        public DataBaseConfig()                             //1 Konstruktor klasy
        {
            dbAddress = "Server address";
            dbPortDefault = 0;
            dbLogin = "Database admin login";
            dbPass = "Database admin password";
            connString = "";
            connStat = false;
        }

        public DataBaseConfig(string dbServerAddress, int dbDefaultPort, string dbAdminLogin, string dbAdminPass)   //2 Konstruktor klasy
        {
            dbAddress = dbServerAddress;
            dbPortDefault = dbDefaultPort;
            dbLogin = dbAdminLogin;
            dbPass = dbAdminPass;
            connString = "";
            connStat = false;
        }
    }

    public class MsSqlConfig : DataBaseConfig
    {
        public void Connect()
        {
            MessageBox.Show("XXX");
        }
    }

    public class MySqlConfig : DataBaseConfig
    {
        public void Connect()
        {
            MessageBox.Show("YYY");
        }
    }

Jak widać na powyższym przykładzie stworzyłem sobie abstrakcyjna klasę po której dziedziczę na pozostałe dwie, zaimplementowałem abstrakcyjna metodę "Connect" ale wywala mi błąd że nie ma tej implementacji, co robię nie tak?

0

Brakuje Ci override w nagłówkach metod w klasach pochodnych.

0

Dzięki wielkie, dopiero po napisaniu posta, zauważyłem ze VS wywala mi informacje o tym ze brakuje "override".

0

Jeszcze tak przy okazji zapytam, czy potrzebne są te 2 konstruktory w klasie DataBaseConfig? W sumie mógłbym chyba użyć jednego domyślnego, bo i tak nie mogę stworzyć obiektu klasy DataBaseConfig i wywołać dowolnego konstruktora, aby wstępnie "poustawiać" zmienne?! Napisałem je w dobrej wierze ale widzę że chyba są bez sensu ;] ???

0

Możesz:

public abstract class DataBaseConfig
    {
        private string dbAddress { get; set; }
        private int dbPortDefault { get; set; }
        private string dbLogin { get; set; }
        private string dbPass { get; set; }
        private bool connStat { get; set; }
        private string connString { get; set; }
 
        public abstract void Connect();                     //Abstrakcyjna metoda do zaimplementowania
 
        public DataBaseConfig()                             //1 Konstruktor klasy
        {
            dbAddress = "Server address";
            dbPortDefault = 0;
            dbLogin = "Database admin login";
            dbPass = "Database admin password";
            connString = "";
            connStat = false;
        }
 
        public DataBaseConfig(string dbServerAddress, int dbDefaultPort, string dbAdminLogin, string dbAdminPass)   //2 Konstruktor klasy
        {
            dbAddress = dbServerAddress;
            dbPortDefault = dbDefaultPort;
            dbLogin = dbAdminLogin;
            dbPass = dbAdminPass;
            connString = "";
            connStat = false;
        }
    }
 
    public class MsSqlConfig : DataBaseConfig
    {
    	public MsSqlConfig(string dbServerAddress, int dbDefaultPort, string dbAdminLogin, string dbAdminPass)
    		:base( dbServerAddress,  dbDefaultPort,  dbAdminLogin,  dbAdminPass)
    	{}
        public override void Connect()
        {
            MessageBox.Show("XXX");
        }
    }
 
    public class MySqlConfig : DataBaseConfig
    {
    	public MySqlConfig(string dbServerAddress, int dbDefaultPort, string dbAdminLogin, string dbAdminPass)
    		:base( dbServerAddress,  dbDefaultPort,  dbAdminLogin,  dbAdminPass)
    	{}
        public override void Connect()
        {
            MessageBox.Show("YYY");
        }
    } 
0
        public DataBaseConfig()                             //1 Konstruktor klasy
        {
            dbAddress = "Server address";
            dbPortDefault = 0;
            dbLogin = "Database admin login";
            dbPass = "Database admin password";
            connString = "";
            connStat = false;
        }
 
        public DataBaseConfig(string dbServerAddress, int dbDefaultPort, string dbAdminLogin, string dbAdminPass)   //2 Konstruktor klasy
        {
            dbAddress = dbServerAddress;
            dbPortDefault = dbDefaultPort;
            dbLogin = dbAdminLogin;
            dbPass = dbAdminPass;
            connString = "";
            connStat = false;
        }

to można skrócić do:

        public DataBaseConfig(string dbServerAddress, int dbDefaultPort, string dbAdminLogin, string dbAdminPass)   //2 Konstruktor klasy
        {
            dbAddress = dbServerAddress;
            dbPortDefault = dbDefaultPort;
            dbLogin = dbAdminLogin;
            dbPass = dbAdminPass;
            connString = "";
            connStat = false;
        }

        public DataBaseConfig()
                : this("Server address", 0, "Database admin login", "Database admin password")
        {}

1 użytkowników online, w tym zalogowanych: 0, gości: 1