Понятно, что интерфейс — это контракт. Также понятно, что интерфейсы COM реализуются при помощи абстрактных классов. Внимание вопрос. В чём разница между интерфейсом и абстрактным классом в С#? То есть interface ISomething и abstract class ISomething.
Здравствуйте Mishka, Вы писали:
M>Понятно, что интерфейс — это контракт. Также понятно, что интерфейсы COM реализуются при помощи абстрактных классов. Внимание вопрос. В чём разница между интерфейсом и абстрактным классом в С#? То есть interface ISomething и abstract class ISomething.
А ты попробуй унаследоваться более чем от одного класса...
И вообще, если бы люди смотрели на все с точки зрения функционала, а не абстракции, то все писали бы на асме. Там ведь тоже можно виртуальную таблицу описать.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
То, что нет множественного наследования классов — это я знаю. Но наличие абстактных классов должно быть чем-то обосновано. Единственное что приходит в голову — если нужна предопределённая функциональность, потому что те же атрибуты можно и в интерфейсе прописать.
Здравствуйте Mishka, Вы писали:
M>помощи абстрактных классов. Внимание вопрос. В чём разница между интерфейсом и M>абстрактным классом в С#? То есть interface ISomething и abstract class ISomething.
Класс это класс, а интерфейс это интерфейс и не надо путать говно со сметаной.
Класс _может_ иметь некоторую функциональность, даже если он абстрактный, а интерфейс такой функционольности иметь не может. Интерфейс это чистая декларация. Классы могут быть реализованы по разному в разных средах и языках, а декларация она и есть декларация.
Класс — это реализация интерфейса.
В чем разница между декларацией функции и ее реализацией, даже если оно пустое и нуждается в переопределении?
Здравствуйте AngeL B., Вы писали:
AB>Здравствуйте Mishka, Вы писали:
M>>помощи абстрактных классов. Внимание вопрос. В чём разница между интерфейсом и M>абстрактным классом в С#? То есть interface ISomething и abstract class ISomething. AB>Класс это класс, а интерфейс это интерфейс и не надо путать говно со сметаной. AB>Класс _может_ иметь некоторую функциональность, даже если он абстрактный, а интерфейс такой функционольности иметь не может. Интерфейс это чистая декларация. Классы могут быть реализованы по разному в разных средах и языках, а декларация она и есть декларация. AB>Класс — это реализация интерфейса. AB>В чем разница между декларацией функции и ее реализацией, даже если оно пустое и нуждается в переопределении?
Вот и я о том же — нет функциональности — интерфейс, есть — класс. Вопрос то в том, что можно иметь
interface A
{
string Str();
}
и
abstract class A
{
abstract string Str();
}
и при этом второе не имеет никакого смысла. Почему бы не выдавать предупреждение о том, что абстрактный класс не имеет свойств и все методы абстрактны (а не забыли ли вы ключевое слово interface)?
Для полной ясности в этом вопросе нужно знать как организован .Net-рантайм (CLR) и как в нем создаются экземпляры. Но это все если абстрагироваться от абстракий. :)
Если правда есть интерес лезь в MSDN-online (или MSDN Magazine) и читай статьи Рихтера о сборке мусора... Прочтя их поймешь, что класс в нет это далеко не тоже что в C++.
PS
Кстати, ключевое слово interface и в 7-ю версию VC ввели.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте Mishka, Вы писали: M>Понятно, что интерфейс — это контракт. Также понятно, что интерфейсы COM реализуются при помощи абстрактных классов. Внимание вопрос. В чём разница между интерфейсом и абстрактным классом в С#? То есть interface ISomething и abstract class ISomething.
класс также имеет интерфейс. может это и оффтопоик, но, имхо, наследование бывает двух видов: интерфейсное и наследование кода.
1. реализация кода в рамках задекларированных ограничений интерфейса.
2. реализация токо части кода, отличающего наследника от родителя, также включает наследование интерфейса.
я на сях реально не писал, но в вб6 реализовать можно токо интерфейсное наследование, что не скажешь про Сшарп
Здравствуйте kreek, Вы писали:
K>Здравствуйте Mishka, Вы писали: M>>Понятно, что интерфейс — это контракт. Также понятно, что интерфейсы COM реализуются при помощи абстрактных классов. Внимание вопрос. В чём разница между интерфейсом и абстрактным классом в С#? То есть interface ISomething и abstract class ISomething. K>класс также имеет интерфейс. может это и оффтопоик, но, имхо, наследование бывает двух видов: интерфейсное и наследование кода. K>1. реализация кода в рамках задекларированных ограничений интерфейса. K>2. реализация токо части кода, отличающего наследника от родителя, также включает наследование интерфейса. K>я на сях реально не писал, но в вб6 реализовать можно токо интерфейсное наследование, что не скажешь про Сшарп
Вот как раз и интересно, что в С++, наследуя класс, можно и не наследовать интерфейс:
class A
class B : private A