Очередная путаница.
От: Mishka Норвегия  
Дата: 08.10.01 13:42
Оценка:
Понятно, что интерфейс — это контракт. Также понятно, что интерфейсы COM реализуются при помощи абстрактных классов. Внимание вопрос. В чём разница между интерфейсом и абстрактным классом в С#? То есть interface ISomething и abstract class ISomething.
Re: Очередная путаница.
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.10.01 15:28
Оценка:
Здравствуйте Mishka, Вы писали:

M>Понятно, что интерфейс — это контракт. Также понятно, что интерфейсы COM реализуются при помощи абстрактных классов. Внимание вопрос. В чём разница между интерфейсом и абстрактным классом в С#? То есть interface ISomething и abstract class ISomething.


А ты попробуй унаследоваться более чем от одного класса...

И вообще, если бы люди смотрели на все с точки зрения функционала, а не абстракции, то все писали бы на асме. Там ведь тоже можно виртуальную таблицу описать.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Очередная путаница.
От: Mishka Норвегия  
Дата: 09.10.01 07:09
Оценка:
То, что нет множественного наследования классов — это я знаю. Но наличие абстактных классов должно быть чем-то обосновано. Единственное что приходит в голову — если нужна предопределённая функциональность, потому что те же атрибуты можно и в интерфейсе прописать.
Re: Очередная путаница.
От: AngeL B. Россия  
Дата: 11.10.01 13:20
Оценка:
Здравствуйте Mishka, Вы писали:

M>помощи абстрактных классов. Внимание вопрос. В чём разница между интерфейсом и M>абстрактным классом в С#? То есть interface ISomething и abstract class ISomething.

Класс это класс, а интерфейс это интерфейс и не надо путать говно со сметаной.
Класс _может_ иметь некоторую функциональность, даже если он абстрактный, а интерфейс такой функционольности иметь не может. Интерфейс это чистая декларация. Классы могут быть реализованы по разному в разных средах и языках, а декларация она и есть декларация.
Класс — это реализация интерфейса.
В чем разница между декларацией функции и ее реализацией, даже если оно пустое и нуждается в переопределении?
Re[2]: Очередная путаница.
От: Mishka Норвегия  
Дата: 11.10.01 14:25
Оценка:
Здравствуйте 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)?
Re[3]: Очередная путаница.
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.10.01 22:18
Оценка:
Здравствуйте Mishka.


Для полной ясности в этом вопросе нужно знать как организован .Net-рантайм (CLR) и как в нем создаются экземпляры. Но это все если абстрагироваться от абстракий. :)

Если правда есть интерес лезь в MSDN-online (или MSDN Magazine) и читай статьи Рихтера о сборке мусора... Прочтя их поймешь, что класс в нет это далеко не тоже что в C++.


PS

Кстати, ключевое слово interface и в 7-ю версию VC ввели.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Очередная путаница.
От: kreek  
Дата: 09.02.02 09:58
Оценка:
Здравствуйте Mishka, Вы писали:
M>Понятно, что интерфейс — это контракт. Также понятно, что интерфейсы COM реализуются при помощи абстрактных классов. Внимание вопрос. В чём разница между интерфейсом и абстрактным классом в С#? То есть interface ISomething и abstract class ISomething.
класс также имеет интерфейс. может это и оффтопоик, но, имхо, наследование бывает двух видов: интерфейсное и наследование кода.
1. реализация кода в рамках задекларированных ограничений интерфейса.
2. реализация токо части кода, отличающего наследника от родителя, также включает наследование интерфейса.
я на сях реально не писал, но в вб6 реализовать можно токо интерфейсное наследование, что не скажешь про Сшарп
Re[2]: Очередная путаница.
От: Mishka Норвегия  
Дата: 11.02.02 09:27
Оценка:
Здравствуйте kreek, Вы писали:

K>Здравствуйте Mishka, Вы писали:

M>>Понятно, что интерфейс — это контракт. Также понятно, что интерфейсы COM реализуются при помощи абстрактных классов. Внимание вопрос. В чём разница между интерфейсом и абстрактным классом в С#? То есть interface ISomething и abstract class ISomething.
K>класс также имеет интерфейс. может это и оффтопоик, но, имхо, наследование бывает двух видов: интерфейсное и наследование кода.
K>1. реализация кода в рамках задекларированных ограничений интерфейса.
K>2. реализация токо части кода, отличающего наследника от родителя, также включает наследование интерфейса.
K>я на сях реально не писал, но в вб6 реализовать можно токо интерфейсное наследование, что не скажешь про Сшарп

Вот как раз и интересно, что в С++, наследуя класс, можно и не наследовать интерфейс:
class A
class B : private A
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.