ein besserer Betreff ist mir leider nicht eingefallen, ich hoffe hier guckt trotzdem jemand rein.
Ich habe eine Reihe von Klassen die eine Basisklasse implementieren, um Redundanzen zu vermeiden. Die Basisklasse liegt jedoch in einer anderen Assemb.y Die Aufteilung ist quasi wie folgt:
- Assembly A -> Klassen - Assembly B -> Basisklasse
Mein Frontend nutzt nun die Klassen und hat natürlich auch einen Verweis auf Assembly A.
Und nun kommen wir zum Unterschied zwischen VB und C#: C# benötigt hier einen weiteren Verweis auf Assembly B. Ansonsten kommt halt eine Fehlermeldung das die Klassen von einer Basis erben und diese ja nicht bekannt sei. Obwohl ich von Aussen gar nicht vor habe, die Methoden der Basisklasse irgendwie zu benutzen (bzw. teilweise hat die auch gar keine Public Methoden, sondern nur Protected).
Nun habe ich ein paar Fragen dazu:
1) Wie kann ich das Verhalten in VB nachstellen? Option Strict On war es nicht.
2) Wie kann ich das Problem vermeiden? Ich habe mal testweise versucht, zusätzlich ein Interface IBasisklasse zu erstellen und die normalen Klassen erben dann von Basisklasse UND implementieren das Interface. Brachte mir bei C# jedoch auch nichts.
Ich wüsste anhand der Problemstellung nicht wirklich, wie ich Google damit füttern sollte. Von daher erhoffe ich mir hier Antworten. Dankeschön schonmal vorab.
Wobei, falls Du das meinst, in der Tat habe ich testweise alle Projekte in einer Projektmappe und referenziere nicht die kompilierte DLL sondern das Projekt selbst (wobei VS ja im endeffekt wohl doch kompiliert)
VB.NET und C# verhalten sich hier wiedermal sehr unterschiedlich. Der Unterschied ist sehr einfach nachzuvollziehen und dennoch verblüffend. Schau dir diesen Thread an, dann dürfte es etwas klarer sein: Question using Interfaces in C# Die ersten Antworten sind nicht besonders aufschlussreich. Am relevantesten dürfte die letzte vom 31 August 2011 sein.
Interessant, Du meinst aber bestimmt die Antwort #6 vom 30.September. Egal. Hm.... Also in dem dort geschilderten Fall mit dem Interface liegt das selbst für mich klar auf der Hand, das da ein Verweis von Exe nach B (dort Lib2) her muss.
Ich mag zwar Automatiken, aber in diesem Fall empfinde ich das VB-Verhalten als sehr sehr schlecht. Ich hatte extra eine Basisklasse gebastelt, damit meine Kollegen später weniger implementieren müssen wenn sie diese einfach mitbenutzen. Und VB suggeriert mir hier wirklich, das ein Verweis auf Assembly A reicht. Und genau das wollte ich damit auch erreichen.
Nur weil ich jetzt eine Exe in C# schreibe bin ich darüber gestolpert. Und das finde ich sehr unschön. Zum einen weil meine "Lösung" eben keine darstellt, zum anderen hätte ich unsauber entwickelt ohne es zu merken.
Wobei, falls Du das meinst, in der Tat habe ich testweise alle Projekte in einer Projektmappe und referenziere nicht die kompilierte DLL sondern das Projekt selbst (wobei VS ja im endeffekt wohl doch kompiliert)