Неявно вызвать базовый или переопределенный метод

У меня есть некоторые классы C#, которые расширены и переопределили методы.

public class BaseClass{
    public abstract void method(){return 0;}
}

public class OverClass : BaseClass{
    public override void method(){
        // some code
        return 2;
    }
}

Внутри переопределенного метода я могу вызватьbase.method(), чтобы вызвать исходный метод его базового класса.

1) Как я могу сделать это вне этого класса? Чтобы я мог явным образом вызвать метод BaseClass из ссылки на объект OverClass.

2) Можно ли вызвать метод OverClass из объекта базового класса?

3) Если метод статический, из статического main базового класса, могу ли я вызвать метод OverClass?

Мне это нужно, потому что некоторые методы в BaseClass имеют многоразовый код, который не нужно переопределять, а другие методы, которые являются абстрактными/виртуальными и имеют определенный код Оверкласса. Итак, из кода в BaseClass мне нужно вызвать переопределенные методы OverClass, а не абстрактные/виртуальные методы BaseClass.

1 ответ

    1. Вам нужен специализированный метод, который не будет overriten или конкретный метод, который не будет помечен как абстрактный.
    public class BaseClass{
        public abstract void method(){ return 0; }
        public void concrete(){ method(); }
    }
    
    public class OverClass : BaseClass{
        public override void method(){
            // some code
            return 2;
        }
    }    
    
    //You can call concrete like that:
    instanceOverClass.concrete();
    instanceBaseClass.conctere();
    
    1. Да. Но только если у вас есть экземпляр OverClass, упакованный как BaseClass, не если это экземпляр OverClass
    BaseClass instanceOverClass = new OverClass();
    (OverClass)instanceOverClass.method();
    //Note that here we will call overriden method from OverClass class
    instanceOverClass.method();
    
    1. Вы всегда можете вызвать статические методы формы везде в коде, но вы должны помнить, что статические методы не передаются с наследованием, так что вы бы вызвать BaseClass.метод();

    Edit: я хотел бы отметить, что этот anwser не охватывает отражение, ведьма будет делать именно то, что вы хотите, но, отражение очень очень медленно.