johnny2888 Geschrieben 25. Februar 2009 Geschrieben 25. Februar 2009 Hallo! Habe in anderen Foren keine klare Antwort erhalten bisher: Da ich gerade das erste mal mit libs (*.dll) progge, wollte ich mal wissen, ob man normale Klassen aus libs ableiten kann? Ich habs mal versucht, aber es funktioniert nicht. Falls sowas geht, hat jmd einen Beispielcode für mich? Grüße Zitieren
Guybrush Threepwood Geschrieben 25. Februar 2009 Geschrieben 25. Februar 2009 Es macht keinen Unterschied wo die Klasse definiert ist um von ihr erben zu können. Zitieren
johnny2888 Geschrieben 25. Februar 2009 Autor Geschrieben 25. Februar 2009 Ich erhalte die Fehlermeldung: "No overload for method 'Klassenname_der_lib' takes 0 arguments" Das bezieht sich auf den Klassennamen der lib nach dem Doppelpunkt. Das is scheinabr eine Fehlinterpretation von VS. Von 'normalen' Klassen kann ich ableiten, da klappt der build. Was mache ich da falsch bei der lib? (namespace is auch berücksichtigt) Zitieren
TDM Geschrieben 25. Februar 2009 Geschrieben 25. Februar 2009 (bearbeitet) Konstruktoraufruf der Basisklasse - kein Standardkonstruktor gefunden. [Edit] Wer lesen kann und so. Dann halt Methode - sicher, dass es die parameterlos gibt? Bearbeitet 25. Februar 2009 von TDM Zitieren
johnny2888 Geschrieben 25. Februar 2009 Autor Geschrieben 25. Februar 2009 Es erfolgt überhaupt kein Aufruf der lib. Es ist eine leere Testklasse ohne Methoden. Nur die lib hat normalen Inhalt. -> Mit allen anderen Klassen funktioniert das ableiten, nur mit der lib nicht. -> Ich kann mit der lib ganz normal arbeiten, wenn sie referenziert ist, aber eben nicht davon ableiten, da kommt die Fehlermeldung beim build. Also sobald ich "MeineKlasse:MeineLibklasse" schreibe ist der Spaß vorbei. Wer weiß, was ich falsch mache? Zitieren
Argbeil Geschrieben 25. Februar 2009 Geschrieben 25. Februar 2009 (bearbeitet) Hi. Was du "Libs" nennst, heißt in .NET Assembly. "wollte ich mal wissen, ob man normale Klassen aus libs ableiten kann?" Kommt drauf an was "normale" Klassen sind. Du kannst von einer öffentlichen Klasse in einer Assembly weitere Klassen ableiten. Das tut man ja permanent sobald man Interfaces verwendet die z.B. in System definiert sind. "Falls sowas geht, hat jmd einen Beispielcode für mich?" Eine neue Assembly erstellen, eine leere Klasse erstellen (public class). Eine neue Assembly oder Applikation erstellen, der neuen App eine Referenz auf das zweite Projekt oder der bereits kompilierten Assembly hinzufügen. Eine neue Klasse erstellen, den Namespace der ersten Klasse inkludieren ( using FirstAssembly; ) und ganz normal mit : ableiten. Bei Problemen den Sourcecode posten. Bearbeitet 25. Februar 2009 von Argbeil Zitieren
TDM Geschrieben 25. Februar 2009 Geschrieben 25. Februar 2009 Es erfolgt überhaupt kein Aufruf der lib. Es ist eine leere Testklasse ohne Methoden. Dann versteh ich nicht, wo eine Methode aufgerufen wird: "No overload for method 'Klassenname_der_lib' takes 0 arguments" Zitieren
johnny2888 Geschrieben 25. Februar 2009 Autor Geschrieben 25. Februar 2009 using dllTestmitmatrix; namespace aus_dll_ableiten_Test { public class Class1:MatrixCalc { public Class1() { } } } Dies funktioniert nicht. Da kommt dann die Fehlermeldung beim build. Gegentest: Nur mit der dll normal referenziert kann ich wunderbar arbeiten. (Hinweis: die dll enthält nur die eine Klasse 'MatrixCalc') Zitieren
TDM Geschrieben 25. Februar 2009 Geschrieben 25. Februar 2009 Und der Namespace der Klasse in der DLL heißt wirklich dllTestmitmatrix? Stimmen die Verweiße? Was für Konstruktoren hat die Klasse? Zitieren
johnny2888 Geschrieben 25. Februar 2009 Autor Geschrieben 25. Februar 2009 Und der Namespace der Klasse in der DLL heißt wirklich dllTestmitmatrix? Ja Stimmen die Verweiße? Ja, sonst könnte ich wohl nicht ohne Ableitungsversuch perfekt damit arbeiten. Oder sind für die Vererbung spezielle Verweise nötig? Was für Konstruktoren hat die Klasse? Nur einen: public MatrixCalc(int m, int n) { ... ... } Wie gesagt, die MatrixCalc-Klasse an sich ist in Ordnung. Tja. Zitieren
Guybrush Threepwood Geschrieben 25. Februar 2009 Geschrieben 25. Februar 2009 Nur einen: public MatrixCalc(int m, int n) { ... ... } Merkst du was? Passt irgendwie nicht zu deinem Konstruktor Zitieren
TDM Geschrieben 25. Februar 2009 Geschrieben 25. Februar 2009 Merkst du was? 25.02.2009, 13:55 doch richtig vermutet. :floet: Zitieren
johnny2888 Geschrieben 25. Februar 2009 Autor Geschrieben 25. Februar 2009 @ guybrush Wie muss es dann heißen? Ich dachte bei der Veerbung kommen keine Klammern hinter dem Klassennamen oder sowas? (bin ein Greenhorn was Veerbung angeht.) Zitieren
TDM Geschrieben 25. Februar 2009 Geschrieben 25. Februar 2009 @ guybrush Wie muss es dann heißen? Ich dachte bei der Veerbung kommen keine Klammern hinter dem Klassennamen oder sowas? Auch wenn ich nicht der Pirat bin: Wenn du nur einen Konstruktor (mit Parametern) in einer Basisklasse hast, musst du diesen in dem Konstruktor der abgeleiteten Klasse explizit aufrufen. Bsp: public Class1():base(1,1) { } Ruft den Basiskonstruktor mit den Parametern {1,1} auf. Zitieren
johnny2888 Geschrieben 25. Februar 2009 Autor Geschrieben 25. Februar 2009 DANKE !!!! Jetzt ist das Rätsel endlich gelöst :-) Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.