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

Наследование интерфейса без реализации дочерних методов

25.04.2017, 09:28. Показов 3884. Ответов 5

Студворк — интернет-сервис помощи студентам
Имеется интерфейс вида:
C#
1
2
3
4
5
6
7
8
    public interface IRepository<T> where T: class
    {
        T GetById(int id);
        List<T> GetAll();
        void Add(T element);
        void Remove(int id);
        void Update(T element);
    }
От него наследуется класс:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    public class ColorRepository: IRepository<Color>
    {
        DataContext db;
 
        public ColorRepository()
        {
            this.db = new DataContext();
        }
 
        public List<Color> GetAll()
        {
            List<Color> allColors = db.Set<Color>().ToList();
 
            return allColors;
        }
 
        public Color GetById (int id)
        {
            var color = db.Colors.Find(id);
 
            return color;
        }
    }
И тут возникла проблема, методы Update, Remove и Add тут реализовывать не надо. Подскажите, как поступить.
Заранее большое спасибо!
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.04.2017, 09:28
Ответы с готовыми решениями:

Проблема реализации методов интерфейса
Совсем недавно добралась до этой темы, так что пытаюсь освоить. Есть два класса : book и studentbook, где studentbook - дочерний класс от...

Правило для реализации методов интерфейса
У меня есть интерфейс IEntity. Его реализовуют все сущности с которыми я в будущем буду оперировать: public class UserEntity: IEntity ...

Наследование интерфейса и наследование реализации
Начал читать книгу GoF и сразу же в предисловии попал в тупик. Чем отличается наследование интерфейса от наследования реализации? Что такое...

5
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
25.04.2017, 09:36
Цитата Сообщение от BboyBlackjack Посмотреть сообщение
методы Update, Remove и Add тут реализовывать не надо
Ну вообще-то надо. Реализация интерфейса подразумевает именно реализацию всех его методов. Иначе зачем такой интерфейс?
Если же вам нужно отложить реализацию для дочерних классов, то сделайте класс ColorRepository абстрактным, тогда эти методы можно оставить без реализации.

И да, неправильно говорить "Наследование интерфейса", правильно "Реализация интерфейса".
0
4 / 4 / 1
Регистрация: 30.11.2013
Сообщений: 108
25.04.2017, 10:05  [ТС]
Вообще-то не надо! Про обязательность я не спорю, знаю это прекрасно сам, но в моем случае они не нужны в этом классе, нужно что-то вроде заплаток сделать, не знаю как. Сразу скажу, что репозиториев много, в некоторых нужно реализовывать все методы, в некоторых нет
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
25.04.2017, 10:12
Лучший ответ Сообщение было отмечено BboyBlackjack как решение

Решение

Цитата Сообщение от BboyBlackjack Посмотреть сообщение
нужно что-то вроде заплаток сделать, не знаю как.
ну так и сделай
C#
1
public void Remove(int id){};
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
25.04.2017, 10:15
Цитата Сообщение от BboyBlackjack Посмотреть сообщение
методы Update, Remove и Add тут реализовывать не надо.
Реализуйте методы и пусть они бросают NotSupportedException.
1
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
25.04.2017, 10:19
BboyBlackjack, можно ещё объявить не один интерфейс, а несколько, например:
C#
1
2
3
4
5
6
7
8
9
    public interface IRepositoryRemovable<T> where T: class
    {
        void Remove(int id);
    }
 
    public interface IRepositoryUpdatable<T> where T: class
    {
        void Update(T element);
    }
В отличие от наследования от классов можно реализовывать несколько интерфейсов.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.04.2017, 10:19
Помогаю со студенческими работами здесь

Чем отличается наследование реализации от наследования интерфейса?
Чем отличается наследование реализации от наследования интерфейса?

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

Отделение интерфейса от реализации класса: компиляция кода реализации
Доброго времени суток, У меня возникла проблема с отделением интерфейса от реализации класса. Допустим, у меня есть три файла: 1....

Использование полей и методов в дочерних классах
Возникла проблема class Subj { public: char name; char prepod; int hours; bool exam; bool credit;

Вызов дочерних методов из абстрактного базового. И добавление в коллекцию
Доброго времени суток! Есть абстрактный класс А Есть несколько классов С =&gt; (С1, С2 ... Сn), все наследуются от А. Во многих...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru