Создание экземпляра интерфейса в C#

Я работаю с MS Excel interop в C#, и я не понимаю, как эта конкретная строка кода работает:

var excel = new Microsoft.Office.Interop.Excel.Application();

где Microsoft. Office. Interop. Excel. Приложением является ИНТЕРФЕЙС, определенный как:

[Guid("000208D5-0000-0000-C000-000000000046")]
[CoClass(typeof(ApplicationClass))]
public interface Application : _Application, AppEvents_Event
{
}

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

5
задан Max 20 March 2010 в 09:31
поделиться

3 ответа

Фактически код, который вы упомянули, создал экземпляр класса ApplicationClass , и это то, что делает атрибут CoClass .

Подробнее см. В этом ответе: Как компилятор C # определяет типы COM?

3
ответ дан 14 December 2019 в 04:35
поделиться
4
ответ дан 14 December 2019 в 04:35
поделиться

ApplicationClass - это реализация интерфейса приложения. В двух словах, интерфейс - это объявление методов класса. Ваша строка кода создает экземпляр класса ApplicationClass (поскольку интерфейс имеет атрибут с классом с конструктором), запрашивает этот экземпляр интерфейса Application и помещает его в переменную excel.

По второму вопросу: нет, вы не можете создать интерфейс с ключевым словом 'new'. Потому что любой интерфейс имеет только объявление методов, а не реализацию. Вы можете попробовать это для создания собственных классов и интерфейсов:

interface MyIntf {
   void method1(string s1);
}

public class MyIntfImplementation : MyIntf {

   void method1(string s1) {
     // do it something
   }
}

После этого вы можете использовать это:

MyIntf q = new MyIntfImplementation();
q.method1();
1
ответ дан 14 December 2019 в 04:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: