Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
3 / 3 / 1
Регистрация: 31.01.2013
Сообщений: 108

Есть ли способ избавиться от дублирующего кода? (+)

12.11.2019, 05:46. Показов 1987. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть класс A, который наследуется от класса A1
и есть класс B, который наследуется от класса B1.

Класс A и B имеют общие методы, которые дублируются. Есть необходимость вынести идентичные методы чтобы избавиться от дублирования.
Как вариант, можно сделать интерфейс IAB, и сделать метод расширения для классов A и B, но это не подходит.

Вопрос: как это можно сделать?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.11.2019, 05:46
Ответы с готовыми решениями:

Есть ли быстрый способ проверки значения в таблице из кода VBA?
На форме есть поле, пользователь вводит некое значение, хочется сразу его проверять, не присутствует ли оно уже в какойто определённой...

Есть ли какой-нибудь способ/программа для автоматического форматирования XAML-кода
Есть ли какой-нибудь способ/программа для автоматического форматирования XAML-кода, т.е. например чтобы из такого: <Grid...

Есть в С++ способ выполнить участок кода, чтобы в этот момент все остальные потоки не работали?
Этот участок кода пишет в консоль лог ошибок, и запоминает текущее место курсора в консоле. Что происходит очень редко. Но между этими...

12
3 / 3 / 1
Регистрация: 31.01.2013
Сообщений: 108
12.11.2019, 05:55  [ТС]
Картинка вопроса, куда выносим дублированные методы из A и B?
A1 и B1 не могут быть изменены, так как это закрытый код. Наш код это A и B.
Миниатюры
Есть ли способ избавиться от дублирующего кода? (+)  
0
Эксперт .NET
 Аватар для Usaga
14122 / 9341 / 1350
Регистрация: 21.01.2016
Сообщений: 35,094
12.11.2019, 06:35
Цитата Сообщение от Igorokmen Посмотреть сообщение
Класс A и B имеют общие методы, которые дублируются.
Либо эти классы являются членами общей иерархии, либо общий код является частью класса С, который размазали по этим двух классам.
0
3 / 3 / 1
Регистрация: 31.01.2013
Сообщений: 108
12.11.2019, 08:13  [ТС]
Такова необходимость. Есть ли решение?
0
Эксперт .NET
 Аватар для Usaga
14122 / 9341 / 1350
Регистрация: 21.01.2016
Сообщений: 35,094
12.11.2019, 08:56
Igorokmen, а решение из сказанного выше никак не напрашивается?
0
Эксперт .NET
 Аватар для Rius
13075 / 7636 / 1669
Регистрация: 25.05.2015
Сообщений: 23,235
Записей в блоге: 14
12.11.2019, 08:57
Abstract class, композиция, агрегация... https://m.habr.com/ru/post/354046/

Вы уверены, что стоит так связывать?
0
548 / 355 / 120
Регистрация: 17.08.2014
Сообщений: 1,351
12.11.2019, 09:14
Что то мне это напоминает реализацию контрактов взаимодействия описанных с двух сторон)
0
3 / 3 / 1
Регистрация: 31.01.2013
Сообщений: 108
12.11.2019, 10:15  [ТС]
Вопрос изначально стоит именно таким образом, что родительские классы A1 и B1 не могут быть изменены.

Ссылка не раскрывает ответ. Я не против паттерна, но какой мог бы подойти?
0
215 / 149 / 48
Регистрация: 28.12.2016
Сообщений: 716
12.11.2019, 10:36
Igorokmen,
Миниатюры
Есть ли способ избавиться от дублирующего кода? (+)  
0
215 / 149 / 48
Регистрация: 28.12.2016
Сообщений: 716
12.11.2019, 10:39
Цитата Сообщение от Igorokmen Посмотреть сообщение
родительские классы A1 и B1 не могут быть изменены
не заметил. Тогда выше картинка не к месту. Как вариант создать класс D, где определить общие методы и создать в A и B классах
1
Эксперт .NET
 Аватар для Rius
13075 / 7636 / 1669
Регистрация: 25.05.2015
Сообщений: 23,235
Записей в блоге: 14
12.11.2019, 10:50
Igorokmen,
Вынесите общие методы в отдельный класс, экземпляр которого передавайте в A и B.
1
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,149
Записей в блоге: 43
12.11.2019, 11:12
Лучший ответ Сообщение было отмечено Igorokmen как решение

Решение

Цитата Сообщение от Igorokmen Посмотреть сообщение
Как вариант, можно сделать интерфейс IAB, и сделать метод расширения для классов A и B, но это не подходит.
Почему нет-то? Вполне себе да. Правда с одной поправкой: метод расширения для этого интерфейса, а не для A и B. Как-то так
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
namespace AB
{
    public class A1
    {
        public string Name { get; set; }
    }
    public class B1
    {
        public string Name { get; set; }
    }
 
    public interface IAB
    {
        string Name { get; set; }
    }
 
    public static class ABExt
    {
        public static void DuplicateName(this IAB ab)
        {
            ab.Name = ab.Name + ab.Name;
        }
    }
    public class A : A1, IAB
    {
 
    }
 
    public class B : B1, IAB
    {
 
    }
}
C#
1
2
3
4
5
6
            A a = new A() { Name = "Qwerty" };
            a.DuplicateName();
            Console.WriteLine(a.Name);
            B b = new B() { Name = "Asdf" };
            b.DuplicateName();
            Console.WriteLine(b.Name);
1
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
12.11.2019, 11:37
Сделать класс C с реализацией общих методов и заиньектить его в A и B.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.11.2019, 11:37
Помогаю со студенческими работами здесь

Лучший способ избавиться от магических строк
Вопрос, конечно, праздный, но всё же... public static class AntiMagic { public const string MyVar1 = nameof(MyVar1); public...

Есть 2 обьедененых столбца и в каждой строчке перед текстом есть пробелы, как от них избавиться
Подскажите, пожалуйста, как можно решить такую задачу. У меня есть на листе Excel таблица, в которой 3-й и 4-й столбцы обьединены, и в...

Есть ли способ безопасно сохранить пароль в программе? То есть вшить в прогу пароль от локальной базы данных например.
Замутил класс, буду наполнять его полезными методами. Возможно создам ещё один другой класс, не расширение. public static class...

Как избавиться от повторяющегося кода?
Есть некое условие: "if" и "else". При котором делается либо одно, либо другое. Но бывает так, что в обоих случаях какая то часть кода...

Избавиться от излишнего кода выражением привязки
Здравствуйте. Вопрос вот в чем: имеется довольно объемный код стиля, в нем используется один и тот же градиент, но один из цветов градиента...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru