2012-01-17 18 views
11

por ejemplo¿Qué es la anotación DispId en C#?

public interface IWMPSettings 

     [DispId(101)] 
     bool autoStart { get; set; } 
     [DispId(102)] 
     int balance { get; set; } 

es útil o es generada automáticamente sólo por el compilador?

+0

@Will Vousden tenemos que estar de acuerdo en desacuerdo. No soy un programador de C++/C#. – IAdapter

+0

Lo suficiente, pero quizás lo más pertinente sería preguntar qué son los identificadores de envío COM, ya que MSDN le dice que esto es para lo que 'DispId' es. –

+1

Significa que lo estás haciendo mal. Proyecto + Agregar referencia, pestaña Examinar, seleccione c: \ windows \ system32 \ wmp.dll. Ahora tiene definido el tipo WMPLib.IWMPSettings. –

Respuesta

13

En resumen, sí es útil, pero sólo para COM envío:

The DispIdAttribute (MSDN):

Especifica el identificador COM de envío (DISPID) de un método, un campo o propiedad .

Este atributo contiene el DISPID para el método, campo o propiedad que describe. Los únicos DISPID son típicamente asignados por el tiempo de ejecución de lenguaje común, pero puede usar este atributo para asignar un DISPID específico a un método. Al importar una biblioteca de tipos, este atributo se aplica a todos los métodos con DISPID asignados. Esto asegura que cualquier implementación administrada del mismo método retiene el mismo DISPID si está expuesto a COM.

+0

No entiendo. No soy el programador de C#. ¿Qué significa eso para mí como desarrollador? – IAdapter

+2

@IAdapter Si sus tipos son COM visibles y espera que sean invocados a través de un código COM (no .Net), entonces * puede * necesitar usar este atributo. Sin embargo, no afectará ningún código que invoque estos métodos desde .Net, de modo que si su código es .Net, el atributo es redundante. –

+0

¿Es esta la manera correcta de seguir alguno de los pasos anteriores? Básicamente, si va a tomar cada uno de sus métodos, propiedades y campos e implementarlo solo una vez, en el mismo ensamblaje, en la misma clase, etc., esto es innecesario, * incluso * cuando se usa COM en VB6 o cualquier otra cosa para acceder a él. Sin embargo, si tomara un método, campo o propiedad e impleméntelo en diferentes dlls o haga algo similar (tal vez sea compatible con diferentes plataformas manualmente, tal vez transfiriendo código antiguo a un idioma más nuevo, etc.), * entonces * eso es cuando esto sea realmente útil, ya que mantendrá la misma identidad. – Panzercrisis