20 / 11 / 4
Регистрация: 20.05.2016
Сообщений: 84
1

Чем лучше "Интерфейсы" от "Абстрактных или Переопределяемых методов"?

01.08.2018, 01:02. Показов 1027. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Столько сижу читаю и не понимаю если интерфейс требует от класса, чтобы он реализовал этот метод причем если имеется дочерний класс, то он соответственно должен его реализовать, не лучше ли просто создать метод, который просто будет переопределяться.

Хотя как я понял иногда интерфейс нужен только, чтобы получить доступ только методам как тут
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
    interface IsomeInterface
    {
        int[] sortArray(int[] array);
        void showArray(int[] array);
    }
    class someClass : IsomeInterface
    {
 
        public void showArray(int[] array)//реализация метода
        {
            foreach (int x in array)
                Console.WriteLine("[" + x + "]");
        }
 
        public int[] sortArray(int[] array) реализация метода
        {
            Array.Sort(array);
            return array;
        }
        public void someText()
        {
            Console.WriteLine("Hello world!");
        }
    }
 
    class Program
    {
        static void Main()
        {
            Random rnd = new Random();
            int[] array = new int[rnd.Next(0, 10)];
            for (int i = 0; i < array.Length; i++)
            {
                array[i] = rnd.Next(0, 100);
            }
 
            someClass a1 = new someClass();                        
            a1.sortArray(array);
            a1.showArray(array);
            a1.someText();
 
            for (int i = 0; i < array.Length; i++)
            {
                array[i] = rnd.Next(0, 100);
            }
 
            IsomeInterface myInterface = a1;
            myInterface.sortArray(array);//я вот про эти доступы только методам которые описаны в  
            myInterface.showArray(array);// интерфейсе IsomeInterface
            //****myInterface.someText();**** не получится так как в интерфейсе IsomeInterface нету такого метода
            Console.ReadLine();            
        }
    }
Так вот мой вопрос зачем нужны интерфейсы, если мы можем (abstract,virtual, override) переопределять метод и даже в каждом дочернем классе можем этот метод по другому реализовать, как я понял интерфейсы нужны, чтобы тупо классу приказывать реализовать его методы и просто тупо получать доступ к тем методам, которые описаны в интерфейсе?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.08.2018, 01:02
Ответы с готовыми решениями:

Столкнулся с ошибкой оператор "/" невозможно применить к операнду типа "группа методов" и "(int)"
Столкнулся с ошибкой при написании кода. Ошибка: оператор &quot;/&quot; невозможно применить к операнду...

Ошибка 0019 Оператор "+" невозможно применить к операнду типа "string" и "группа методов"
public string PrintEquiliteralTriangle() { AngleEquiliteralTriangel(); ...

Оператор "+" невозможно применить к операнду типа "string" и "группа методов"
Оператор &quot;+&quot; невозможно применить к операнду типа &quot;string&quot; и &quot;группа методов&quot; Первый раз что-то...

Дан массив строк: "red", "green", "black", "white", "blue". Запишите в файл элементы массива построчно (в новой строке)
пишу так но не помогает: static void Main(string args) { string...

9
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
01.08.2018, 04:12 2
Цитата Сообщение от Salim_Destroyer Посмотреть сообщение
интерфейсы нужны, чтобы тупо классу приказывать реализовать его методы и просто тупо получать доступ к тем методам, которые описаны в интерфейсе?
Да, именно так. Ну и плюс ко всему, класс может реализовывать несколько интерфейсов, а наследоваться только от одного класса.
0
Заблокирован
01.08.2018, 08:10 3
Shogun31337, еще по поводу интерфейсов.
Когда следует использовать интерфейсы:
1. Если нам надо определить функционал для группы разрозненных объектов, которые могут быть никак не связаны между собой.
2. Если мы проектируем небольшой функциональный тип
0
Эксперт JS
6483 / 3894 / 2005
Регистрация: 14.06.2018
Сообщений: 6,781
01.08.2018, 08:56 4
Стив Роджерс, там мутно описано.

Интерфейс нужен, чтобы мы могли объявить переменную с типом данного интерфейса. Интерфейс предоставляет перечень названий публичных методов с определенными сигнатурами.

Соответственно, если у переменной получилось сослаться на незнакомый экземпляр, о котором она ничего не знает, кроме объявленного перечня методов, то переменная просит у незнакомого экземпляра выполнить метод.


У абстрактного класса преимущества - предоставляет в дополнение к перечню публичных методов некоторые уже реализованные методы + слои полей экземпляра + вся статическая часть класса.

Недостаток абстрактного класса, который часто перекрывает все преимущества - можно наследоваться от единственного абстрактного класса.
А реализовывать несколько интерфейсов сразу можно.
0
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
01.08.2018, 14:05 5
Цитата Сообщение от Стив Роджерс Посмотреть сообщение
еще по поводу интерфейсов
Да, я в курсе, что они нужны для слабосвязных объектов.
0
1210 / 999 / 257
Регистрация: 15.06.2012
Сообщений: 3,876
01.08.2018, 14:35 6
Цитата Сообщение от Salim_Destroyer Посмотреть сообщение
зачем нужны интерфейсы
даную тему пора закреплять... (кого я обманываю?! не спасет )

15.02.2013
Интерфейсы зачем их использовать - C#/.NET 4.x

06.07.2018
Абстрактные классы и интерфейсы - C#

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

11.01.2018
Абстрактный класс или Интерфейс - C#

20.01.2017
Когда уместно использовать интерфейс? - C#
1
Shogun31337
01.08.2018, 14:49
  #7

Не по теме:

Цитата Сообщение от Wolfdp Посмотреть сообщение
даную тему пора закреплять...
Да уж. Этот вопрос появляется с завидной периодичностью.

Цитата Сообщение от Wolfdp Посмотреть сообщение
(кого я обманываю?! не спасет )
Ответ на вопрос "как передать данные из формы в форму?" давным давно в FAQ'е лежит. А вопрос все равно постоянно возникает... Поиск? Не, не слышали...

0
Стив Роджерс
01.08.2018, 14:57
  #8

Не по теме:

Shogun31337, те кто задает подобные вопросы, желают услышать ответ по быстрее. И им абсолютно все равно на поиск, правила форума и т.д.

0
1210 / 999 / 257
Регистрация: 15.06.2012
Сообщений: 3,876
01.08.2018, 15:31 9

Не по теме:

Цитата Сообщение от Стив Роджерс Посмотреть сообщение
желают услышать ответ по быстрее.
Если бы реально хотели "побыстрее", то уже 100 раз нагугли/разобрали. Распылятся не буду, ибо тут начиная от "сделайте за меня" и "хачю уже писать ацкие праграмы!!", до банальной несистематическости обучения.



ТСу -- если не понятно, приймите пока как дожное. Вообще, если microsoft что-то ввело, то оно 100% использовалось. А если ему и есть логичная альтернатива, то старая версия оставлена для обратной совместимости.

Конкретно интерфейсы 100% поймете, когда столкнетесь с внедрением зависимостей или юнит тестами.
0
Wanna be serious
586 / 473 / 186
Регистрация: 31.07.2013
Сообщений: 1,693
01.08.2018, 22:10 10
Цитата Сообщение от Wolfdp Посмотреть сообщение
Конкретно интерфейсы 100% поймете, когда столкнетесь с внедрением зависимостей или юнит тестами.
Ещё раньше - когда про паттерны услышит. Ибо паттерны - модно
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.08.2018, 22:10
Помогаю со студенческими работами здесь

Если ответ отличается от "да" или "нет" тогда программа должны писать "Ничего не понятно"
Программа работает так как мне нужно (оптимизация не интересует) есть только один момент где...

Описать класс "поезд", содержащий поля "пункт назначения", "номер поезда", "время отправления"
Помогите пожалуйста с классом Описать класс «поезд», содержащий следующие закрытые поля:...

Какое условие лучше ставить: "меньше либо равно нулю" или "меньше единицы"
if (v &lt;= 0) { /*...*/ } или if (v &lt; 1) { /*...*/ } какое условие лучше писать? мне кажется что...

Построить иерархию классов "Студент", "преподаватель", "персона", "заведующий кафедрой"
Построить иерархию классов: Студент, преподаватель, персона, заведующий кафедрой 1) Разработать...


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

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

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