Ich denke, das bringt es auf:
Typen, die eine duale Schnittstelle erlauben Clients verwenden, um ein bestimmtes Schnittstelle Layout zu binden. Alle Änderungen in einer zukünftigen Version an das Layout des Typs oder eines Basistyps werden COM Clients, die an die Schnittstelle binden, unterbrechen. Nach Standard, wenn das ClassInterfaceAttribute-Attribut nicht angegeben ist, wird eine Nur-Senden-Schnittstelle verwendet.
http://msdn.microsoft.com/en-us/library/ms182205.aspx
Es erhöht die Möglichkeit, dass mit dem Auto Dual-Attribute in dieser Klasse etwas zu ändern bricht jemand anderen Code, wenn die Klasse geändert wird. Wenn der Verbraucher die Möglichkeit hat, etwas zu tun, das ihnen in Zukunft möglicherweise Probleme bereiten wird.
Die nächste Option ist ClassInterfaceType.AutoDual. Dies ist der schnelle und schmutzige Weg, um frühe Bindungsunterstützung zu erhalten (und die Methoden in VB6 IntelliSense erscheinen zu lassen). Es ist aber auch einfach, die Kompatibilität zu unterbrechen, indem Sie die Reihenfolge der Methoden ändern oder neue Überladungen hinzufügen. Vermeiden Sie die Verwendung von AutoDual.
http://www.dotnetinterop.com/faq/?q=ClassInterface
fand ich endlich den Link, der darüber spricht, was mit AutoDual los ist und wie es funktioniert:
http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/7fa723e4-f884-41dd-9405-1f68afc72597
Die Warnung vor AutoDual ist nicht die Tatsache, dass Dual-Schnittstellen ist aber die Tatsache, dass es automatisch die COM-Schnittstelle für Sie generiert. Das ist schlecht. Jedes Mal, wenn die COM-Schnittstelle regeneriert werden muss, erhalten Sie eine neue GUID und potenziell neue Mitglieder. Wenn sich die GUID ändert, erhalten Sie eine brandneue Schnittstelle/Klasse, soweit COM betroffen ist. Für frühe Bindung müssten Sie die Clients jedes Mal neu erstellen die Schnittstelle wurde neu generiert. Der bevorzugte Ansatz besteht darin, die COM-Klassenschnittstelle explizit mit einer GUID zu definieren. Dann können alle Frühbuchten Clients die definierte Schnittstelle verwenden und sich nicht darum kümmern, sie während der Entwicklung auf zu ändern. Deshalb ist die empfohlene Option, keine der CLR zu sagen, um sie nicht automatisch für Sie zu generieren. Sie können die duale Schnittstelle dennoch implementieren, wenn Sie sie benötigen.
Der Teil, den ich nicht klar ist, ist dies: 'Alle Änderungen in einer zukünftigen Version in das Layout des Typs oder einer beliebigen Basistypen wird COM-Clients zu brechen. Wenn ich eine Eigenschaft von int in double ändere, bricht der Client ab? Oder bedeutet es, dass wenn ich das .NET-Stück einfach neu kompiliere, der VB6-Client es nicht mehr konsumieren kann? – AngryHacker
Solange Sie die Schnittstelle nicht ändern, sollten Sie in Ordnung sein. http://www.dotentininterop.com/faq/?q=ClassInterface – kemiller2002
@Kevin, so einfach neu kompilieren meine .NET-Bibliothek wird nicht den Verbraucher als brechen? Und was bedeutet 'Ändern der Reihenfolge der Methoden 'wirklich? Bedeutung Ändern Sie die Reihenfolge der Methoden im Code? Ich weiß immer noch nicht, warum wir AutoDual vermeiden sollten. Ich denke, es versteht sich, dass, wenn Sie die Schnittstelle ändern, als der Verbraucher nicht arbeiten wird. In der VB6-Welt war das schon immer so. – AngryHacker