Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中创建接口实例#_C#_Oop - Fatal编程技术网

C# 在C中创建接口实例#

C# 在C中创建接口实例#,c#,oop,C#,Oop,我在C#中使用MS Excel interop,我不明白这一行代码是如何工作的: var excel = new Microsoft.Office.Interop.Excel.Application(); 其中,Microsoft.Office.Interop.Excel.Application是一个定义为: [Guid("000208D5-0000-0000-C000-000000000046")] [CoClass(typeof(ApplicationClass))] public int

我在C#中使用MS Excel interop,我不明白这一行代码是如何工作的:

var excel = new Microsoft.Office.Interop.Excel.Application();
其中,Microsoft.Office.Interop.Excel.Application是一个定义为:

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

我认为当接口被CoClass属性修饰时会发生一些神奇的事情,但是我们怎么可能用一个新的关键字创建一个接口的实例呢?它不应该生成编译时错误吗?

实际上是您提到的创建了
ApplicationClass
类实例的代码,这就是
CoClass
属性所做的


有关详细信息,请参阅此答案:

Ayend。ApplicationClass是实现应用程序接口。换句话说,接口是类的方法声明。您的代码行创建类ApplicationClass的实例(因为接口具有带有构造函数的类的属性),查询接口应用程序的此实例并将其放入变量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个有趣的博客,但我可能不会急于使用它。它感觉像是应用于接口的适配器模式(如果有意义的话!)。