psr.syam Ответов: 2

В чем разница между интерфейсом и абстрактным классом, который имеет нереализованные методы?


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

Я видел так много отличий от нескольких статей, но ни одна из них не дала ответа на вышеприведенный вопрос..Может ли кто-нибудь помочь мне понять это?

Что я уже пробовал:

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

Philippe Mori

Очевидно, что ответ на такой вопрос легко найти с помощью Google. Кстати, если вы наберете заголовок вопроса, то первая ссылка укажет вам на тему, которая обсуждает этот вопрос.
В чем разница между интерфейсом и абстрактным классом?

2 Ответов

Рейтинг:
0

OriginalGriff

C# имеет ограничение: вы можете наследовать только от одного базового класса, но никогда не от двух или более.
Но это создает проблему, если вы хотите добавить два разных поведения в свой класс: возможно, это экземпляр Person, который также действует как набор атрибутов. Если Person вообще не реализован для учета атрибутов, то вы не можете использовать их оба в одном классе.
Войдите в интерфейс: это не класс, это контракт. Интерфейс говорит: "Вы можете присоединиться к этому клубу, при условии, что вы подчиняетесь правилам", а правила таковы: "вы должны реализовать эти свойства и методы". Как только вы это сделаете, вы получите все преимущества членства в клубе, но вы все равно можете получить свой класс из другого базового класса.
Вы можете построить абстрактный класс, который выглядит как интерфейс, но не наоборот-и вы не можете вывести свой класс из двух абстрактных базовых классов.


Рейтинг:
0

Kornfeld Eliyahu Peter

Плюсы и минусы...

Интерфейс:
* Объект может реализовывать несколько интерфейсов, поэтому может маскироваться по-разному.
* Интерфейс не может содержать общих реализаций, поэтому каждый класс должен иметь свой собственный.
абстрактный класс:
* В C# вы можете наследовать только от одного, поэтому поведение multiply не поддерживается через наследование
* Более строгое отношение к тому, что (и как) нужно реализовывать
* Может содержать общие реализации