Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 28.04.2012
Сообщений: 6
1

Понять суть интерфейсов

28.04.2012, 22:24. Просмотров 1149. Ответов 5
Метки нет (Все метки)


Подскажите новичку что то запутался с интерфейсами.
Читаю книжку по C# и что то мне кажется странным что интерфейс это как бы самостоятельная единица кода, которая реализуется в классе наследнике. А потом через ссылки на интерфейс дергается как бы реализация из наследуемого класса. Это если бы они (интерфейсы) были бы виртуальными то тогда еще можно как то понять, а так
То есть это если бы по ссылке на базовый класс вызывался метод из наследуемого класса, но не виртуальный.
В общем запутался.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.04.2012, 22:24
Ответы с готовыми решениями:

В чём заключается суть интерфейсов?
Здравствуйте. Объясните, пожалуйста, в чем заключается смысл интерфейса, потому что так как понимаю...

Не могу понять суть рецензии на лабу
Всем привет. Сделал лабу, пришла рецензия. Список замечаний 1. Есть недочёты при оформлении...

Разработка интерфейсов, использование механизма наследования интерфейсов и применение их в программах
Имеется код, необходимо реализовать, и протестировать эти интерфейсы IComparable (сравнимый),...

Не могу понять саму суть использования MVC при написании программы
Изучаю паттерн MVC. Прочитал уже много чего, но не очень доходит до меня как использовать MVC при...

__________________
Помогаю в написании курсовых работ и дипломов здесь.
Записывайтесь на профессиональные курсы С#-разработчиков‌
5
Эксперт .NET
14852 / 11239 / 2949
Регистрация: 17.09.2011
Сообщений: 18,825
28.04.2012, 23:34 2
Не совсем понятна суть вопроса, потому просто прокомментирую некоторые ваши фразы:

Цитата Сообщение от Piratic Посмотреть сообщение
интерфейс это как бы самостоятельная единица кода, которая реализуется в классе наследнике.
В классе-имплементаторе, а не наследнике. Наследник в контексте интерфейсов - это интерфейс, который наследуется от другого интерфейса. А классы от интерфейсов не наследуются, они их реализуют.

Цитата Сообщение от Piratic Посмотреть сообщение
А потом через ссылки на интерфейс дергается как бы реализация из наследуемого класса.
Совершенно верно. Но, опять же, не наследуемого класса, а класса, реализующего данный интерфейс.

Цитата Сообщение от Piratic Посмотреть сообщение
Это если бы они (интерфейсы) были бы виртуальными то тогда еще можно как то понять
Что вы подразумеваете под виртуальным интерфейсом?

Цитата Сообщение от Piratic Посмотреть сообщение
То есть это если бы по ссылке на базовый класс вызывался метод из наследуемого класса, но не виртуальный.
А по-другому и нельзя. По ссылке на базовый класс можно вызвать либо метод базового класса, либо переопределенный в классе-наследнике виртуальный метод.
0
0 / 0 / 0
Регистрация: 28.04.2012
Сообщений: 6
29.04.2012, 01:01  [ТС] 3
Ну так в том то и дело что он и не вертуальный и в тоже время в самом интерфейсе не рализован
0
1265 / 966 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
29.04.2012, 01:06 4
интерфейс это просто унификация единицы абстракции
0
Эксперт .NET
14852 / 11239 / 2949
Регистрация: 17.09.2011
Сообщений: 18,825
29.04.2012, 12:47 5
Цитата Сообщение от Piratic Посмотреть сообщение
Ну так в том то и дело что он и не вертуальный и в тоже время в самом интерфейсе не рализован
Кто "он"?

Заодно еще раз повторю свой вопрос:
Цитата Сообщение от kolorotur Посмотреть сообщение
Что вы подразумеваете под виртуальным интерфейсом?
0
0 / 0 / 0
Регистрация: 28.04.2012
Сообщений: 6
29.04.2012, 20:19  [ТС] 6
Давайте по порядку попробуем. Наверное я действительно не совсем корректно пытался объяснить свой вопрос.
Давайте посмотрим на обычные классы.
C#
1
2
3
4
5
6
7
8
public class A{
void f(){
   Console.WriteLine("Class A");
}
public class B: A{
void f(){
   Console.WriteLine("Class B");
}
дальше где то в программе
C#
1
2
A a=new B();
a.f();
Должно напечатать "Class A" , а если бы f() был виртуальный то напечалобы "Class B"

Почему же с интерфейсами не так?
Тоесть если у нас есть интерфейс

C#
1
2
3
4
5
6
7
8
public interface IA{
   void f();
}
 
public class B: IA{
void f(){
   Console.WriteLine("Class B");
}
и где то далее в программе по аналогии
C#
1
IA a=new B();
по идее a.f(); не должно напечатать "Class B" оно как бы вообще ничего не должно печатать

Например если я еще не полностью запутался в абстрактных классах все абстрактные методы по умолцанию виртуальные?

Тоесть возможно методы интерфейса всегда виртуальные и вызывают нужный метод из класса наследника? (это был 1-й вопрос)

И еще на что именно указывает ссылка в коде IA a=new B(); см. пример выше.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.04.2012, 20:19

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь или здесь.

В чем суть интерфейсов?
За день я в интернете начиталась столько всего про интерфейсы, что запуталась до нельзя!!! И...

Понять суть задачи!
Using the 3 methods above, create an application that calculates the roots of an equation of second...

Понять суть ООП
Всем привет! Я привык на процедурном писать теперь трудно перейти к ООП. Написал Класс для работы...

Не могу понять суть Header()
Доброго времени суток! Вот на досуге делаю лабы, в общем и целом запутался. Задание не сложное,...

Не могу понять суть ошибки
код 1: from functools import reduce def intersect(a, b): return a= b= c=

Не могу понять суть заданию
Добрый день! Уже несколько дней бьюсь даже не над решением задания, а над вообще его сутью. ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.