Что такое интерфейс в C (COM), он такой же, как интерфейс в C # - PullRequest
1 голос
/ 01 июня 2010

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

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 01 июня 2010

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

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

1 голос
/ 01 июня 2010

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

Пример "интерфейса" в C ++:

class Comparable {
public:
  virtual int compareTo(Comparable const * const other) const = 0; // <- the "= 0" indicates a _pure_ virtual method 
};
0 голосов
/ 01 июня 2010

У них определенно есть общие детали низкого уровня. Интерфейс - это список указателей функций на обоих языках. Чаще применяется в C ++, потому что большинство компиляторов уже реализуют виртуальные функции в виде "v-таблицы". Однозначное соответствие с таблицей отправки COM.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...