2010-03-20 20 views
5

estoy trabajando con interoperabilidad MS Excel en C# y no entiendo cómo esta línea de código funciona:Creación de instancia de interfaz en C#

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

donde Microsoft.Office.Interop.Excel.Application es una interfaz define como:

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

estoy pensando que algo mágico sucede cuando la interfaz está decorado con un atributo Coclase, pero aún así ¿cómo es posible que podamos crear una instancia de una interfaz con una nueva palabra clave ? ¿No debería generar un error de tiempo de compilación?

Respuesta

3

En realidad, el código que mencionó creó la instancia de la clase ApplicationClass y eso es lo que hace el atributo CoClass.

Ver esta respuesta para más detalles: How does the C# compiler detect COM types?

+0

+1 yo estaría de acuerdo con eso. – amelvin

4

Ayende blogged sobre esto.

+0

+1 Blog interesante, pero es posible que no me apresure a usarlo. Se siente como un patrón de adaptador aplicado a una interfaz (¡si eso tiene sentido!). – amelvin

1

ApplicationClass es implementar la interfaz de la aplicación. En dos palabras, la interfaz es una declaración de métodos de clase. Tu línea de código crea una instancia de la clase ApplicationClass (porque la interfaz tiene un atributo con la clase con el constructor), consulta esta instancia de la aplicación de interfaz y pon esto en Excel variable.

En la segunda pregunta: no, no puede crear la interfaz con la palabra clave 'nueva'. Porque, cualquier interfaz tiene solo declaración de métodos, no implementación. Puede probar esto para crear clases que propios e interfaces:

interface MyIntf { 
    void method1(string s1); 
} 

public class MyIntfImplementation : MyIntf { 

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

Después de esto usted puede utilizar esto:

MyIntf q = new MyIntfImplementation(); 
q.method1(); 
Cuestiones relacionadas