Entwickler-Ecke
C# - Die Sprache - Interface Problem
Dave86 - Mo 23.02.09 14:04
Titel: Interface Problem
Hallo an alle.
Ich hab ein kleines Problem mit den Interfaces in C#. Von c++ kenne ich es, dass ich über einen zeiger direkt funktionen vom Interface aufrufen kann, ohne den Namen der Klasse zu kennen die dieses Interface implementiert.
So etwas suche ich auch in c# bin bis jetzt aber nicht fündig geworden.
Das interface brauche ich zum entkoppeln, darum will ich den namen der implementieren Klasse nicht kennen um flexibel zu sein.
Ich hab mir schon folgenden Thread durchgelesen (
typisierter zeiger [
http://www.c-sharp-forum.de/viewtopic.php?t=57946]), ich glaub aber des is nicht des richtige
JüTho - Mo 23.02.09 14:16
Hallo,
mir ist nicht klar, was Du erreichen willst. Du kannst durchaus ein Objekt per Interface deklarieren, dann durch eine Klasse erstellen und anschließend per Interface benutzen:
Deklaration der Klasse in der unten genannten Assembly
C#-Quelltext
1:
| public class Context : IAdad9Context { ... } |
Nutzung in der Anwendung:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| private IAdad9Context adad9 = null; public void StartAdad9Import(int databaseID) { Assembly asm = Assembly.Load("VSPolis-Adad9"); adad9 = (IAdad9Context)asm.CreateInstance("JThomas.VSClient.Adad9.Context"); if (adad9 == null) MessageBox.Show("Adad9-Context steht nicht zur Verfügung"); else adad9.Start(this, databaseID); } |
Vielleicht hilft es Dir. Jürgen
Dave86 - Mo 23.02.09 14:26
Hallo Jürgen.
Danke für deine Antwort. Mir ist klar, dass ich das Interface verwenden kann, aber nur wenn ich eine Klasse kenne die dieses Interface implementiert. Ich will aber verhindern, dass ich diese Klasse kennen muss.
Grüße
Dave
Kha - Mo 23.02.09 15:18
Irgendein Teil
muss doch logischerweise die Klasse kennen, um sie überhaupt instantiieren zu können - anders kann das bei C++ auch nicht funktionieren. Von dort aus kannst du das Objekt dann an Teile übergeben, die die konkrete Klasse nicht mehr zu kennen brauchen.
Vielleicht suchst du auch
Dependency Injection [
http://de.wikipedia.org/wiki/Dependency_Injection]. Vereinfacht ausgedrückt verlangst du damit im Code einfach nach einem Interface IFoo, die Klasse dahinter ist zur Compile Time noch nicht bekannt. Erst beim Ausführen wird aus einer Config-Datei ausgelesen, welche Klasse nun dahinter stecken soll. Wenn du in Jürgens Code den Klassennamen dynamisch auslesen würdest, wäre das schon ein Minimalbeispiel für DI.
Dave86 - Mo 23.02.09 15:34
Hi Kha.
Danke für deine Antwort.
Ich glaube ich hatte da irgendwie einen Denkfehler drin.
Aber die Idee mit der DI is gut danke
Grüße
Dave
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!