0 / 0 / 0
Регистрация: 27.09.2011
Сообщений: 3
1
.NET 4.x

Переопределение метода базового класса

27.09.2011, 18:57. Показов 3767. Ответов 6
Метки нет (Все метки)

Есть библиотека, в которой находится базовый класс А, который содержит функцию проверки Check. Есть два производных класса B и C. Задача заключается в том, что нужно, используя эту библиотеку, переопределить функцию проверки Check(), чтобы в другом проекте классы B и C использовали этот переопределённый алгоритм проверки.

Есть:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public abstract class A {
    int a;
 
    public void Run() {
         if (Check()) {
         ...
         }
    }
 
    protected bool Check() { 
        return (a > 10);
    }
}
 
public class B: A {...}
 
public class C: A {...}
 
public void Process() {
    B.Run();
    c.Run();
}
Т.е. надо:

protected override bool Check() {
return (a > 100 && b < 5);
}



Есть ли какое-то красивое решение этой проблемы?

Единственное, что сейчас приходит на ум - это переопределение Check непосредственно в классах Extended_B : B и Extended_C : C, но по факту получается, что код-то один и тот же.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.09.2011, 18:57
Ответы с готовыми решениями:

Переопределение метода базового класса в производном
В базовом классе Base метод CreateObjMC создаёт объект производного класса, а в производном классе...

Полиморфизм: вызов метода базового класса, переопределенного метода и нового метода
В базовом классе метод помечен как virtual. Насколько я понял из книги: override означает, что...

Использование метода из наследованного класса к объекту базового класса
Есть метод public void OpExp() { if (Person._age&lt;18) ...

Вызов метода базового класса
public class BaseClass { public virtual void Foo() { Console.WriteLine (&quot;BaseClass.Foo&quot;); } }...

6
Эксперт .NET
16732 / 12488 / 3280
Регистрация: 17.09.2011
Сообщений: 20,713
27.09.2011, 19:15 2
Наследуйте абстрактный класс A1 от А, переопределите в нем метод Check, а потом наследуйте B и С от А1
0
0 / 0 / 0
Регистрация: 27.09.2011
Сообщений: 3
27.09.2011, 19:20  [ТС] 3
Т.е. А1: А, а затем В1: А1, С1: А1? Но в этом случае В1 и С1 не будут включать функционал, реализованный в В и С.
0
Эксперт .NET
16732 / 12488 / 3280
Регистрация: 17.09.2011
Сообщений: 20,713
27.09.2011, 22:33 4
В и С - ваши классы или тоже входят в библиотеку?
Если входят, то ничего не поделаешь - придется переопределять одинаковый метод в обоих классах.
0
0 / 0 / 0
Регистрация: 27.09.2011
Сообщений: 3
27.09.2011, 23:21  [ТС] 5
В и С тоже входят в первую библиотеку, но у меня есть возможно как-то подправить их, если надо. Главная суть - это чтобы в двух разных местах проверка работала по-разному с минимальным дублированием кода
0
Эксперт .NET
16732 / 12488 / 3280
Регистрация: 17.09.2011
Сообщений: 20,713
27.09.2011, 23:46 6
Если есть возможность подправить, то лучше сделать как я предложил в первом варианте:
наследовать абстрактный класс А1 от А, в нем перегрузить нужный метод. Наследовать В и С от А1 (меняется всего одна строчка кода).
В результате получаем такую иерархию:

А
|
A1 (здесь метод Check перегружен)
/ \
B C
0
мастер топоров
913 / 738 / 101
Регистрация: 16.08.2009
Сообщений: 1,476
28.09.2011, 13:38 7
наследование - это хорошо, да не очень
Цитата Сообщение от abriss Посмотреть сообщение
Главная суть - это чтобы в двух разных местах проверка работала по-разному с минимальным дублированием кода
если проверка должна работать по-разному, тогда вам нужно либо делать разную реализацию метода проверки в наследуемых классах, либо же извернуться и сделать только один класс, который наследуется от "А" и в нем динамически поменять реализацию метода проверки
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.09.2011, 13:38
Помогаю со студенческими работами здесь

Вызов метода из базового класса
привет! не могу понять, не доходит, как в c# сделать так чтобы из производного класса вызвать...

Перекрытие метода базового класса
Уважаемые форумчане, обьясните пожалуйста разницу между class A { public void...

Вызов метода наследика с базового класса
Здравствуйте. Подскажите, как в базовом классе можно вызвать метод наследника, который не...

Переопределение метода стороннего класса
Здравствуйте, в проекте возникла необходимость переопределить методы стороннего класса(не предка),...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru