Ist es möglich, eine Teilklasse in separaten DLLs mit zwei Teilen (gleicher Namespace, gleicher Klassenname) zu versehen?
Ist es möglich, eine Teilklasse in separaten DLLs mit zwei Teilen (gleicher Namespace, gleicher Klassenname) zu versehen?
Antworten:
Aus MSDN - Teilklassen und Methoden :
Alle Teiltypdefinitionen, die Teile desselben Typs sein sollen, müssen in derselben Assembly und demselben Modul (EXE- oder DLL-Datei) definiert werden. Teildefinitionen können nicht mehrere Module umfassen.
Nein. Teilklassen sind ein rein sprachliches Merkmal. Wenn eine Assembly kompiliert wird, werden die Dateien kombiniert, um den Typ zu erstellen. Es ist nicht möglich, die Dateien auf verschiedene Assemblys zu verteilen.
Je nachdem, was Sie tun möchten, können Sie möglicherweise Erweiterungsmethoden verwenden , um das zu erreichen, was Sie benötigen.
Nein, das ist nicht möglich. Wenn die Assembly kompiliert ist, muss die Klasse beendet werden.
Während andere Antworten das unangenehme "Nein" liefern, das jeder, der auf dieser Seite landet, nicht sehen oder hören wollte, war ich von einem anderen Gedanken beeindruckt, der hier noch nicht erwähnt wurde. Wenn Teilklassen über Baugruppen hinweg zulässig wären, würde man Zugriff auf private Mitglieder vorhandener Typen erhalten, die nicht von ihm geschrieben wurden, sodass er sie auf eine Weise manipulieren kann, die nicht vom ursprünglichen Autor beabsichtigt war, wodurch die Funktionalität aller ererbenden Klassen gefährdet wird auch.
Nicht nur das, diese Klassen in anderen Versammlungen (und ihren Kindern) müssten neu kompiliert werden, damit es funktioniert. Daher ist es logischerweise nicht möglich, eine Klasse auf verschiedene Assemblys aufzuteilen.
Sie können Erweiterungsmethoden verwenden, wenn Sie einer Klasse in einer anderen DLL eine Methode hinzufügen möchten. Der einzige Nachteil dieser Methode ist, dass Sie keine statischen Methoden hinzufügen können.
Die Frage ist, warum Sie eine Teilklasse in einer anderen Assembly erstellen möchten. Sie können abstrakte Klassen und Schnittstellen über Assemblys hinweg definieren. Möglicherweise müssen Sie dies untersuchen.
Sie möchten wahrscheinlich nur eine Wrapper-Klasse in Ihrer eigenen Bibliothek erstellen, um die Klasse in der Bibliothek des 3. Teils herum. Fügen Sie dann der Wrapper-Klasse die gewünschten Funktionen hinzu.