jayant812 Ответов: 4

Как я могу получить доступ к методу базового класса с тем же именем в производном классе с помощью объекта производного класса


class Base
{
    public void Method()
    {
        // ...
    }
}

class Derived : Base
{
    public void Method()
    {
        // ...
    }
}

main()
{

}


Итак, в основной функции, как я могу получить доступ к методу базового класса, имеющему то же имя в производном классе, используя объект производного класса.

4 Ответов

Рейтинг:
2

Christian Graus

базы.способ();

Кажется, мне нужно добавить больше контента, но больше сказать нечего.


Sauro Viti

Я думаю, что "Инкуайрер"не хочет звонить на базу.Метод () "изнутри" производного класса...

jayant812

я знаю, что мы можем получить доступ к таким функциям, как "base.method();" в производном классе
но я хочу создать объект производного класса в основной функции и с помощью этого объекта я хочу получить доступ к методу базового класса как?

koool.kabeer

используйте другую функцию в производном классе для вызова базы.Метод();
класс базовый
{
способ общественного недействительными ()
{
....
....
}
}

производный класс:базовый
{
метод public override void()
{
....
....
}
public void Method2()
{
база.Метод();
}
}

главный()
{
производные д = новый производный();
d. Метод2();
}

Рейтинг:
2

E.F. Nijboer

Трюк с Delphi раньше состоял в том, чтобы просто вернуть его обратно в базовый класс и вызвать оттуда. Это работало исключительно хорошо для свойств, которые были скрыты определенными компонентами.

Вы могли бы попробовать :)

(base)derivedObject.method();


удачи!


Рейтинг:
0

Sauro Viti

Ты не можешь! Если класс наследует от базового класса и переопределяет некоторые методы базового класса, предполагается, что новый класс расширяет базовый класс: метод базового класса знает, как обращаться с базовым классом, но это не может быть допустимой операцией для наследуемого класса!

Вот что вы можете сделать:

class Base
{
   public virtual void Method()
   {
      // Do something specific to Base class
      ...
   }
}

class Derived : Base
{
   public override void Method()
   {
      // This will call Base.Method() ...
      base.Method();

      // ... and now we extend the functionalities of Method() by doing something more specific to Derived class
      ...
   }
}


Toli Cuturicu

Причина моего голосования 1
ложный

Рейтинг:
0

Toli Cuturicu

Derived derived1 = new Derived();
(derived1 as Base).Method();


Sauro Viti

Причина моего голосования 1
Ваше решение работает до тех пор, пока метод не объявлен виртуальным.
В любом случае, это плохая техника программирования, и она нарушает принципы ООП.
Компилятор C# позволяет вам это делать, но он дает вам предупреждение (CS0108), если вы переопределяете метод, который не является виртуальным, без использования ключевого слова new.

Sauro Viti

Ух ты! Какая замечательная идея! Инкапсуляция и полиморфизм-это две основы ООП! Если спрашивающий спрашивает о том, как их нарушить, мудрый разработчик должен предложить ему избежать этого и почему, а не просто сказать ему, как попасть в беду!

Toli Cuturicu

> ваше решение работает до тех пор, пока метод не был объявлен виртуальным.
Что ж... метод не был объявлен виртуальным, поэтому...
в любом случае, это плохая техника программирования, и она нарушает принципы ООП.
Я знаю. Я этого не делаю. jaiant812 хочет это сделать.
И насчет предупреждения:
1. предупреждение не является ошибкой.
2. его можно смело игнорировать.
3. Это может быть suppresed с помощью директивы pragma предупреждение.

Toli Cuturicu

Но ваш ответ был действительно неправильным. -Ты не можешь!.
Ну, можно (хотя это и не желательно).
Вот почему я проголосовал за 1.
Но вы проголосовали за 1 из чистой мести.

Sauro Viti

Ладно, я ошибаюсь, потому что технически это возможно, и вы знаете, что это очень плохой подход.
Вы говорите: "Я знаю. Я этого не делаю. jaiant812 хочу это сделать", то если кто-то скажет "Я хочу покончить с собой", то хороший ответ будет "купить пистолет"? Очевидно, что это преувеличенный пример, но именно по этой причине я голосую 1: чтобы быть хорошим ответом, вы должны указать: "вы можете сделать это таким образом, но это не рекомендуется, потому что...", чтобы спрашивающий действительно мог узнать об ООП.
Тогда мы оба заслуживаем плохого голосования! ;-)