Задать вопрос
wolverine777
@wolverine777

Как вытащить унаследованные методы из объекта класса?

Привет, я делаю задание по полиморфизму на одном из онлайн-курсов и все бы хорошо но упёрся лбом в проблему (как мне кажется синтаксиса) как вытащить из объекта унаследованные методы в данной ситуации:

public class DbCommand
    {
        public DbCommand(object DbConnection)
        {

            Console.WriteLine("Db_COMMAND is online...\n");

            if (DbConnection is null)
            {
                throw new ArgumentNullException(nameof(DbConnection));
            }
        }

        public void Executerrr()
        {

            /*

            Here must be an object that should "discover" methods OpenConnection() and CloseConnection()
            but I cannot figure out what kind of object should I put inside Execute() method...

            */
        
        }

    }


    public abstract class DbConnection
    {
     
        public string _ConnectionString { get; set; }
        public TimeSpan Timeout { get; set; }

        public DbConnection(string connectionString)
        {
            _ConnectionString = connectionString;
        }

        public abstract void OpenConnection();
        public abstract void CloseConnection();
    }


    public class SqlConnection : DbConnection
    {
        public SqlConnection(string connectionString) : base(connectionString)
        {
        }

        public override void CloseConnection()
        {
            Console.WriteLine("SQL connenction Closed");
        }

        public override void OpenConnection()
        {
            Console.WriteLine("SQL connenction OPEN");
        }
    }

    public class OracleConnection : DbConnection
    {
        public OracleConnection(string connectionString) : base(connectionString)
        {
        }

        public override void CloseConnection()
        {
            Console.WriteLine("ORACLE connenction Closed");
        }

        public override void OpenConnection()
        {
            Console.WriteLine("ORACLE connenction OPEN");
        }
    }

static void Main(string[] args)
        {
// simple example:

            var SQLconn = new SqlConnection("sql ready");
            var ORACLEconn = new OracleConnection("oracle ready");

            SQLconn.OpenConnection();
            SQLconn.CloseConnection();

            ORACLEconn.OpenConnection(); // works fine
            ORACLEconn.CloseConnection(); // works fine
            
// here's a more complicated example

            var start = new DbCommand(new OracleConnection("oracle ready"));

            start.Executerrr();
}


Мне нужно чтобы если я даю объект класса OracleConnection - при запуске метода Executerrr() выполнялись методы именно для OracleConnection и, соответственно, если SqlConenction - выводились фразы для Sql. Просто object DbConnection не видит абстрактные методы (а по моим расчётам как бы вроде должен )))).

Спасибо!
  • Вопрос задан
  • 46 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@AndromedaStar
.Net - monkey
Нужно явно указать класс.
public DbCommand(object DbConnection) -> public DbCommand(DbConnection DbConnection)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы