2009-09-16 4 views
2
  1. N'a pas tout à fait obtenir les éléments suivants from MSDN:Besoin de ClassInterfaceType.None?

    ClassInterfaceType.None

    Indique qu'aucune interface de classe est générée pour la classe. Si aucune interface n'est implémentée explicitement, la classe peut uniquement fournir un accès en liaison tardive via l'interface IDispatch . C'est le réglage recommandé pour ClassInterfaceAttribute. En utilisant ClassInterfaceType.None est le seul moyen d'exposer la fonctionnalité grâce à des interfaces implémentées explicitement par la classe.

  2. Est-ce que [ComVisible(true)] est un must pour la visibilité COM?

Répondre

7

Voir this blog post pour l'expanation du premier problème. Le point est que si vous spécifiez ClassInterfaceType.None une interface supplémentaire est générée et cela peut causer des problèmes de compatibilité binaire si vous modifiez l'ordre des méthodes, changez leurs signatures ou en supprimez certaines. Une meilleure alternative consiste à définir explicitement une interface et à en hériter votre classe en spécifiant ClassInterfaceType.None.

ComVisible(true) n'est pas un must pour la visibilité COM. Par défaut, toutes les méthodes publiques des classes publiques et toutes les classes publiques sont visibles COM, toutes les autres entités ne sont pas visibles COM. Si vous avez besoin de modifier cela, vous utilisez l'attribut ComVisible, généralement pour diminuer la quantité de classes COM visibles, car chaque entrée de registre de classe visible COM et les entrées de bibliothèque de type sont générées, ce qui provoque une pollution inutile du registre et gonfle la bibliothèque de types. IMO c'est une bonne idée de marquer explicitement toutes les entités publiques avec ComVisible.