Lange nichts mehr gemacht / Interfaces vergessen :-)

Asterix-Ac

Erfahrenes Mitglied
Hi Leute,

ich habe das letzte halbe bis dreiviertel Jahr kein Buchstaben C# angefasst und musste nun feststellen, dass ich eine ganze Menge vergessen habe :(

Ich bastle nun an einem Projekt, dass 1 Projekt mit GUI hat und 2 Projekte mit Klassenbibliotheken. Eine DLL einthällt nur Interfaces (vorerst mal nur eines).
Die 2. DLL enthällt eine Klasse mit Methoden.
Ich möchte nun von meiner GUI über das Interface auf die 2. DLL zugreifen.

So ähnlich wie Alex das in seinem Remoting Chat gemacht hat. Doch alles lokal. Aber ich weiß ums verrecken nicht mehr, wie ich ohne Instanz die Interface-Methoden ansprechen kann *grmpf*. Und das Googln hat auch nichts ergeben.

Ich hoffe, Ihr könnt einem WIEDER-Anfänger ein wenig auf die Sprünge helfen ;)

Asterix :confused:
 
Du musst ein Interface implementieren, du kannst es nicht instanzieren.

Interface:
Code:
public interface IMyClass {
}
Implementierung:
Code:
public class MyClass : IMyClass {
}
In der Implementierung müssen alle Methoden, die vom Interface vorgegeben werden, implementiert werden. Danach kannst du die implementierte Klasse instanzieren, entweder vom Type MyClass oder vom Type IMyClass.

Typ MyClass:
Code:
MyClass mc = new MyClass();
Typ IMyClass:
Code:
IMyClass mc = new MyClass();
Hoffe, das hat dir geholfen.
 
Hallo Norbert,

erstmal danke für die schnelle Antwort.
Ich habe das, was Du geschrieben hast auch geich ausprobiert, doch ganz hat es nicht funktioniert. :(
Also das Interface hat funktioniert, aber wie ich im ersten Post beschrieben hatte, habe ich 3 Projekte : 1 GUI, 1 DLL mit Interface und 1 DLL mit Methoden.

Ich habe mir nun in der GUI eine Hilfsklasse geschaffen, die die Methoden des Interfaces Implementiert. In der Form1-Klasse habe ich die Hilfsklasse instanziiert und zwar vom Typ des Interfaces -> Funktioniert.
Aber eine Methode, hat einen Rückgabewert vom Typ string. Das musste ich in der Hilfsklasse natürlich auch angeben.
Wenn ich mir den string von der Methode (der eigentlich über das interface aus der DLL-Methode kommen sollte) ausgeben lasse, kommt aber nur der Rückgabewert aus der Hilfsklasse.
Wie muss ich vorgehen, damit ich den Rückgabewert aus der Methoden-DLL erhalte.
GUI <-> Interface <-> Methoden
(Es ist ja schon fast peinlich, sowas zu fragen, aber ich hab' wirklich viel vergessen ;) )
Oder siehst Du noch eine bessere Lösung? Ich hatte mir das so überlegt, da die Methoden-DLL auf einen SQL-Server zugreifen wird, aber ich mit einem 2. Interface in der interface-DLL (ähnlich dem Remoting Chat) per Remoting auf einen Server zugreifen möchte, wo die Methoden-DLL auch laufen könnte. Dies möchte ich später mit einem Schalter in der GUI beeinflussen können, wo die Methoden-DLL liegt.
Ich weiß nicht, ob das Interface dafür geeignet ist, aber im Remoting-Chat war es das. Und das möchte ich auch lokal weiterführen.
Vielleicht hast Du ja eine bessere Lösung :) oder einfach nur, wie ich an meine Methoden herankomme.

Asterix :confused:
 
Du verstehst da glaub ich etwas falsch.

Das Interface dient dazu, vorzuschreiben, welche Methoden von einer Klasse implementiert werden MÜSSEN.

Zweitens solltest die Implementierungen deiner Interfaces in die gleiche DLL legen (ist natürlich abhängig vom Anwendungsgebiet, aber in den meisten Fällen macht es durchaus Sinn).

Du scheinst Methoden und Klassen zu verwechseln. Klassen sind quasi ein Container für Methoden, Properties etc.

Wenn du nun im Interface eine Methode angegeben hast, die als Rückgabewert einen String hat, dann muss es erstens diese Methode in der Implementierung geben und diese muss dann natürlich die gleiche Signatur haben (also gleicher Name, gleicher Rückgabewert und gleiche Parameter). Durch die Implementierung bekommst du dann eben einen String als Rückgabewert zurück.
 
Hallo Norbert,

also der Unterschied zwischen Methoden und Klassen ist mir noch durchaus bewußt :)

Aber ich dachte, ich könnte das Problem genauso lösen wie Alex in seinem Remoting Chat Tutorial (kennst du es?).
Dort gibt es eine DLL die 2 Interfaces enthält : IServer und IClient. Von der Client-GUI kann ich über das IServer-Interface auf das Remoting-Objekt des Servers zugreifen und diese Methoden ausführen. Und bei der Server-GUI geht es genau umgekehrt.
Und ich hatte mir das auch so schön für meine Anwendung vorgestellt, um die GUI von der Logik zu trennen. Aber ... ich bin halt nur noch in der Theorie so gut (hihi - heul).
Wie würdest Du meinen Ansatz umsetzen?
Ich habe mal meinen ersten Programmentwurf als Bild angehängt.
Das Modul 'Datenschittstelle' ist die dll mit den Interfaces. Die Module 1-4 liegen in der GUI. Und das Modul 'lokale Datenspeicherung' ist meine DLL mit meinen Methoden, die ich von der GUI aus erreichen möchte.
Aber ich bin natürlich für jeden Lösungsansatz offen.

Asterix
 

Anhänge

  • programmentwurf.gif
    programmentwurf.gif
    10 KB · Aufrufe: 47
Zuletzt bearbeitet:

Neue Beiträge

Zurück