Esempio di classe COM (Guida per programmatori C#)
Di seguito è riportato un esempio di una classe esposta come oggetto COM. Dopo aver inserito questo codice in un file CS e averlo aggiunto al progetto, impostare la proprietà Registra per interoperabilità COM su True. Per ulteriori informazioni, vedere Procedura: registrare un componente per l'interoperabilità COM.
Per esporre gli oggetti Visual C# a COM, è necessario dichiarare un'interfaccia di classe, un'interfaccia di eventi se richiesta, nonché la classe stessa. Per essere visibili a COM è necessario che i membri di classe rispettino le seguenti regole:
La classe deve essere pubblica.
Le proprietà, i metodi e gli eventi devono essere pubblici.
Le proprietà e i metodi devono essere dichiarati nell'interfaccia di classe.
Gli eventi devono essere dichiarati nella relativa interfaccia.
Gli altri membri pubblici della classe non dichiarati in queste interfacce non saranno visibili a COM, ma ad altri oggetti di .NET Framework.
Per esporre le proprietà e i metodi a COM, è necessario dichiararli nell'interfaccia di classe e contrassegnarli con un attributo DispId, nonché implementarli nella classe stessa. L'ordine con cui i membri vengono dichiarati nell'interfaccia è quello utilizzato per la vtable COM.
Per esporre gli eventi dalla classe, è necessario dichiararli nell'interfaccia degli eventi e contrassegnarli con un attributo DispId. È opportuno che la classe non implementi questa interfaccia.
È invece necessario che la classe implementi l'interfaccia di classe. La classe è in grado di implementare più di un'interfaccia, ma la prima implementazione sarà quella dell'interfaccia di classe predefinita. Implementare i metodi e le proprietà esposte a COM, che devono essere contrassegnati come pubblici e corrispondere alle dichiarazioni presenti nell'interfaccia della classe. Dichiarare, inoltre, gli eventi originati dalla classe, che devono a loro volta essere contrassegnati come pubblici e corrispondere alle dichiarazioni presenti nell'interfaccia degli eventi.
Esempio
using System.Runtime.InteropServices;
namespace project_name
{
[Guid("EAA4976A-45C3-4BC5-BC0B-E474F4C3C83F")]
public interface ComClass1Interface
{
}
[Guid("7BD20046-DF8C-44A6-8F6B-687FAA26FA71"),
InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface ComClass1Events
{
}
[Guid("0D53A3E8-E51A-49C7-944E-E72A2064F938"),
ClassInterface(ClassInterfaceType.None),
ComSourceInterfaces(typeof(ComClass1Events))]
public class ComClass1 : ComClass1Interface
{
}
}
Vedere anche
Riferimenti
Interoperabilità (Guida per programmatori C#)
Pagina Compilazione, Progettazione progetti (C#)