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

Интерфейсы - их реальное применение в работе

28.01.2018, 12:41. Показов 2471. Ответов 43
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Какой у вас опыт работы с интерфейсами? как их можно использовать так, что бы они были полезными?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.01.2018, 12:41
Ответы с готовыми решениями:

Реализовать набор классов, реализующих стандартные интерфейсы по работе с коллекциями
Всем доброго времени суток. Столкнулся с проблемой, туплю, не могу понять что делать нужно. Задание: Реализовать набор классов,...

Интерфейсы. Выделить у классов общий интерфейс(или интерфейсы)
Задание: У классов выделить общий интерфейс ( или интерфейсы ). первый класс : using System; using...

Реальное применение
Посмотрел я на этот язык, вроде не особо сложный. Но вот вопрос, где его применять кроме мат расчетов? Сам изучаю С Шарп, и практически все...

43
Alvin Seville
 Аватар для Соколиный глаз
346 / 276 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
12.02.2018, 13:42
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Zodt Посмотреть сообщение
А почему Вы говорите про наследование интерфейсов?
Насколько я знаю, сначала класс наследуется от интерфейса, а лишь потом его реализует.
0
Эксперт .NET
 Аватар для Rius
13405 / 7858 / 1701
Регистрация: 25.05.2015
Сообщений: 23,870
Записей в блоге: 14
12.02.2018, 13:54
Zodt,
Правильно так:
An interface defines a contract. A class or struct that implements an interface must adhere to its contract. An interface may inherit from multiple base interfaces, and a class or struct may implement multiple interfaces.
Интерфейс определяет контракт. Класс или структура, которые реализуют интерфейс, обязаны придерживаться контракта. Интерфейс может быть унаследован от множества базовых интерфейсов, и класс или структура могут реализовать множество интерфейсов.
Предварительная спецификация C# 6.0

Однако, один и тот же смысл может быть выражен и другими словами. Может и не по канонам, но все поймут всё равно.
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
12.02.2018, 14:47
Цитата Сообщение от Zodt Посмотреть сообщение
А почему Вы говорите про наследование интерфейсов? На сколько я понимаю, интерфейсы ведь не наследуются, а реализуются.
Правильно понимаете.
Но это сродни фразе "в переменной хранится строка": все (надеюсь) знают, что в переменной строкового типа хранится ссылка на строку, но для краткости пишут иначе — всем и так понятно о чем идет речь.
Плохо, конечно, когда начинающие изучать язык читают сообщения с неправильной терминологией, но от этого никуда не деться.

Добавлено через 2 минуты
Цитата Сообщение от Volobuev Ilya Посмотреть сообщение
Насколько я знаю, сначала класс наследуется от интерфейса, а лишь потом его реализует.
Нет, он его просто реализует.
У интерфейса нет ничего, что класс может унаследовать: ни полей, ни реализации методов (скоро будет!).
1
Alvin Seville
 Аватар для Соколиный глаз
346 / 276 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
12.02.2018, 14:57
Цитата Сообщение от kolorotur Посмотреть сообщение
Нет, он его просто реализует.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Car : IEquatable<Car> // Не наследование ли интерфейса классом?
{
    public string Make {get; set;}
    public string Model { get; set; }
    public string Year { get; set; }
 
    // Implementation of IEquatable<T> interface
    public bool Equals(Car car)
    {
        if (this.Make == car.Make &&
            this.Model == car.Model &&
            this.Year == car.Year)
        {
            return true;
        }
        else
            return false;
    }
}
https://docs.microsoft.com/ru-... nterfaces/
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
12.02.2018, 15:01
Цитата Сообщение от Volobuev Ilya Посмотреть сообщение
Не наследование ли интерфейса классом?
Нет, реализация.

В качестве упражнения можете в статье по приведенной вами ссылки найти любую комбинацию слов "класс" или "структура", "наследует" и "интерфейс".
1
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
12.02.2018, 17:22
Цитата Сообщение от kolorotur Посмотреть сообщение
(скоро будет!).
Это они с Явы содрали, 100500. Насколько помню, там это есть (методы по умолчанию).
0
 Аватар для _katon_
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,094
12.02.2018, 17:31
Цитата Сообщение от kolorotur Посмотреть сообщение
Нет, он его просто реализует.
Я не понимаю о чем речь... чисто технически ":" означает, что далее будут перечислены наследуемые Класс и Интерфес(ы). В том же Шилдте формулировки типа "Наследование интерфейсов" и "Один интерфейс может наследовать другой" не редкость. Я вот как-то всю жизнь думал, что:
C#
1
public class Car : IEquatable<Car> //Наследование интерфейса
а
C#
1
2
3
4
5
6
7
8
9
10
11
    public bool Equals(Car car) //Реализация метода интерфейса
    {
        if (this.Make == car.Make &&
            this.Model == car.Model &&
            this.Year == car.Year)
        {
            return true;
        }
        else
            return false;
    }
Без наследования метод "Equals" превращается из реализации интерфейса в обычный именованный метод.
"Тыкните" меня лицом, пожалуйста, в то место в интернете где обосновывается ваша точка зрения: "Интерфейсы не наследуются".
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
12.02.2018, 17:32
Цитата Сообщение от insite2012 Посмотреть сообщение
Это они с Явы содрали
Ага, но в яве это имеет смысл, т.к. там есть анонимные реализации и нет делегатов, потому те же события реализованы через интерфейсы.
В шарпе как-то пока острой необходимости в таком функционале не наблюдалось.
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
12.02.2018, 17:32
Цитата Сообщение от insite2012 Посмотреть сообщение
Насколько помню, там это есть
Жуть. Специально полез смотреть. Таки да - в Java 8 добавили возможность прямо в интерфейсе реализовывать методы. Этож какая каша в голове у жавовских программистов.
Не, в жаве есть интересные решения, которые я бы с удовольствием перетащил в шарп, например - enum, который может содержать пользовательские объекты (иногда может быть очень удобным).
Но это совсем не тот случай.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
12.02.2018, 17:38
Цитата Сообщение от aquaMakc Посмотреть сообщение
в жаве есть интересные решения
Согласен. Мне понравилось там реализация интерфейсов без создания класса (ну как там это правильно называется, забыл). Тип интерфейса и сразу реализация. Без создания типа.
0
Эксперт .NET
 Аватар для Usaga
14724 / 9494 / 1362
Регистрация: 21.01.2016
Сообщений: 35,790
12.02.2018, 17:43
Цитата Сообщение от insite2012 Посмотреть сообщение
Мне понравилось там реализация интерфейсов без создания класса
В C#8 хотят внедрить нечто похожее. Только я не понял зачем.
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
12.02.2018, 17:47
Цитата Сообщение от insite2012 Посмотреть сообщение
Мне понравилось там реализация интерфейсов без создания класса
А мне вот именно это и не нравится. Получим пересекающийся функционал абстрактных классов и интерфейсов. Да и вообще по моему, это размазывание сути интерфейса, как строгого контракта по сиюминутным хотелкам массы быдлокодеров.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
12.02.2018, 17:48
Цитата Сообщение от aquaMakc Посмотреть сообщение
по моему, это размазывание сути интерфейса
Но удобно было бы, в умелых руках, согласитесь?
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
12.02.2018, 17:50
Цитата Сообщение от insite2012 Посмотреть сообщение
Но удобно было бы, в умелых руках, согласитесь?
Да, выстрелить себе в ногу станет намного проще...
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
12.02.2018, 17:51
Цитата Сообщение от _katon_ Посмотреть сообщение
Я не понимаю о чем речь
О терминологии — не более.

Цитата Сообщение от _katon_ Посмотреть сообщение
чисто технически ":" означает, что далее будут перечислены наследуемые Класс и Интерфес(ы).
Правильно так: означает, что дальше будут перечислены наследуемый класс и реализуемые интерфейсы

Цитата Сообщение от _katon_ Посмотреть сообщение
В том же Шилдте
Шилдт, кстати сказать, порой пишет очень странные вещи — здесь на форуме не раз его косяки обсуждались.

Цитата Сообщение от _katon_ Посмотреть сообщение
формулировки типа "Наследование интерфейсов" и "Один интерфейс может наследовать другой" не редкость.
Да, один интерфейс может наследовать другой интерфейс (хотя разработчики языка сами говорили, что лучше было бы использовать слово "расширять", но спек уже написан).
А вот класс именно реализует интерфейс, а не наследует.

Цитата Сообщение от _katon_ Посмотреть сообщение
"Тыкните" меня лицом, пожалуйста, в то место в интернете где обосновывается ваша точка зрения: "Интерфейсы не наследуются".
Обязательно в интернете? Спецификация языка не подойдет?
1.9. Interfaces
An interface defines a contract that can be implemented by classes and structs.
10.1.4.2 Interface implementations
A class-base specification may include a list of interface types, in which case the class is said to directly
implement the given interface types.
13. Interfaces
An interface defines a contract. A class or struct that implements an interface must adhere to its contract. An
interface may inherit from multiple base interfaces
, and a class or struct may implement multiple interfaces.
Interfaces can contain methods, properties, events, and indexers. The interface itself does not provide
implementations for the members that it defines. The interface merely specifies the members that must be
supplied by classes or structs that implement the interface.
И так далее.

Единственное место в спецификации языка, где упоминается слово "наследование" в контексте интерфейса — это когда один интерфейс наследует другой.
Везде, где речь идет о структурах и классах, используется исключительно слово implements — реализует.

Опять же — это просто вопрос терминологии. От того, что кто-то говорит "мой класс наследует интерфейс", программа работать иначе не стает.
1
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
12.02.2018, 17:55
Цитата Сообщение от aquaMakc Посмотреть сообщение
Да, выстрелить себе в ногу станет намного проще...
Так-то да, но удобно же)) Вот вспомните метод Sort(), одна из перегрузок которого принимает IComparer (пока не принимаем во внимание другую перегрузку, с делегатом Comparison). Нам нужно создать тип, реализовать его, создать объект и передать в метод. А с таким новшеством все бы сразу создалось.
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
12.02.2018, 17:57
Цитата Сообщение от insite2012 Посмотреть сообщение
Нам нужно создать тип, реализовать его, создать объект и передать в метод.
) каждый день по 7 раз приходится заново это делать, каждый раз заново набирая код руками.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
12.02.2018, 18:00
Цитата Сообщение от aquaMakc Посмотреть сообщение
каждый день по 7 раз приходится заново это делать, каждый раз заново набирая код руками.
Бывает и больше))) А куда деваться?)
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
12.02.2018, 18:04
Цитата Сообщение от insite2012 Посмотреть сообщение
Бывает и больше)
Ужас )
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
12.02.2018, 18:07
Цитата Сообщение от aquaMakc Посмотреть сообщение
Ужас )
Жизнь-боль.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.02.2018, 18:07

Реальное применение рекурсивных вычислений
Добрый день. Ползая по форуму https://www.cyberforum.ru я обратил внимание, что довольно часто студентам задают задачи на рекурсивные...

Реальное применение локальных классов
В общем-то читал Александреску и вспомнил старую главу о локальных классах. Там приводился пример с использованием локальных классов, как...

Реальное применение классов и заголовочных файлов
работаю с Visual Studio около полугода, и нигде не видел более иезуитского способа организации инклудов и классов. это просто нечто. когда...

Математическая задачка, имеющая реальное практическое применение
Добрый день, уважаемые форумчане. Очередной раз обращаюсь за Вашей помощью. Скажите пожалуйста реально ли решить с помощью VBA следующую...

Интерфейсы - практическое применение
Привет народ! Может кто-нибудь объяснить на пальцах, для чего нужны интерфейсы? Описание и определение я конечно же гуглил, с этим всё...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru