Рейтинг:
2
Christian Graus
базы.способ();
Кажется, мне нужно добавить больше контента, но больше сказать нечего.
Sauro Viti
Я думаю, что "Инкуайрер"не хочет звонить на базу.Метод () "изнутри" производного класса...
jayant812
я знаю, что мы можем получить доступ к таким функциям, как "base.method();" в производном классе
но я хочу создать объект производного класса в основной функции и с помощью этого объекта я хочу получить доступ к методу базового класса как?
koool.kabeer
используйте другую функцию в производном классе для вызова базы.Метод();
класс базовый
{
способ общественного недействительными ()
{
....
....
}
}
производный класс:базовый
{
метод public override void()
{
....
....
}
public void Method2()
{
база.Метод();
}
}
главный()
{
производные д = новый производный();
d. Метод2();
}
Рейтинг:
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: чтобы быть хорошим ответом, вы должны указать: "вы можете сделать это таким образом, но это не рекомендуется, потому что...", чтобы спрашивающий действительно мог узнать об ООП.
Тогда мы оба заслуживаем плохого голосования! ;-)