2010-05-31 2 views
1

Хорошо, я знаю, что такое интерфейс, но так как я попал на C и работал с объектами COM (Component Object Model), кажется, интерфейс в COM немного отличается от интерфейса, который я знаю.Что такое интерфейс в C (COM), это то же самое, что интерфейс в C#

Итак, что я пытаюсь сделать, это устранить пробелы здесь, потому что я изучаю C, многие вещи звучали очень хорошо для меня, но не совсем то, что они кажутся.

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

Интерфейс, который я слышу в COM, кажется, просто указатели. Они не могут напрямую извлекать объекты, но могут извлекать объекты только с помощью метода. Это что такое COM-интерфейс? Если да, то почему они дали им одинаковые имена, если они совершенно разные.

Также я просто хотел добавить, что заголовки в C++ напоминают мне интерфейсы C#. Не уверены, есть ли у них какие-либо отношения. Но в любом случае я просто пытаюсь это понять.

+0

Вы имеете в виду «C++» все места, которые вы набрали только «C»? – Pointy

+0

Нет никаких интерфейсов в C. –

+0

Я предполагаю, что он означает «C++», поскольку он говорит, что только что попал в C++ .. –

ответ

0

Есть определенно низкоуровневых деталей они имеют в общем. Интерфейс представляет собой список указателей функций на обоих языках. Более часто реализуется в C++, потому что большинство компиляторов уже реализуют виртуальные функции как «v-таблица». Индивидуальное совпадение с таблицей отправки COM.

Где они начинают расходиться, являются методы IUnknown. COM-интерфейс имеет методы AddRef и Release для управления памятью, используя подсчет ссылок. Не проблема в C#, потому что сборщик мусора позаботится об этом.

И COM не поддерживает наследование. Не проблема в C#, если вы хотите получить указатель на интерфейс, тогда вы просто бросаете ссылку на объект. Это должно быть сделано явно в COM с помощью метода IUnknown :: QueryInterface(). В COM есть некоторая поддержка для повторного использования объектов, реализованная посредством агрегации. Это настолько тупо, что немногие когда-либо реализуют его.

+0

Что вы подразумеваете под «И COM не поддерживает наследование»? COM поддерживает одиночное наследование на уровне интерфейса. Вы имели в виду, что он не поддерживает определенный стиль наследования или что-то еще? – Luke

+0

Нет, он объединяет методы «базового» интерфейса, все они должны быть повторно реализованы. C++ * делает * поддержку наследования, что значительно упрощает реализацию интерфейса. –

2

Интерфейс, который я знаю, как контрактов. Это объекты, которые имеют только объявления методов, без . Все классы, реализующие интерфейс , должны включать в себя методы интерфейса .

Интерфейс C# будет пустым абстрактным классом на C++.

+0

Я обновил вопрос. Я имел в виду, что в COM (объектная модель компонента) – numerical25

1

Термин интерфейс, как правило, является просто концепцией какого-то «контракта» в разработке программного обеспечения. Поскольку C не имеет объектно-ориентированной встроенной (это процедурный язык), термин «интерфейс» означает нечто иное, чем в Java, например, где они имеют особое значение в качестве языковой конструкции. В C++ также нет явной конструкции интерфейса/языка интерфейса, но вы можете получить аналогичную семантику, определяя чистые абстрактные классы (классы, содержащие только чистые виртуальные методы).

Пример для «интерфейса» в C++:

class Comparable { 
public: 
    virtual int compareTo(Comparable const * const other) const = 0; // <- the "= 0" indicates a _pure_ virtual method 
}; 
+0

Ну, я думаю, тот, о котором я говорю, находится в COM. Как IUNKNOWN. – numerical25

Смежные вопросы