Wieso kann man IF Methoden nicht gegenseitig aufrufen
-
Hallo,
wenn ich ein Interface explizit implementiere kann ich keine andere explizit definierte Funktion aufrufen. Fehler "Can not access private function"
Beispiel siehe unten.
Ich weiß man kann this nach Interface casten und dann die Funktionen aufrufen oder eine private Funktion in der Klasse machen und dann auf Func1 und 2 aufrufen.
Fragen:
- Finde nur ich das blöd?
- Gibt es einen Grund hierfür?interface Interface { void Func1(); void Func2(); } class InterfaceImp { void Interface.Func1() { //code1 } void Interface.Func2() { Func2(); //geht nicht //code 2 } }
-
Ähmm, müsste wenn nicht die Klasse vom Interface abgeleitet sein?
class InterfaceImp : Interface
cu André
-
void Interface.Func2() { ((Interface)this).Func2(); //geht //code 2 }
-
Ihr habt beide ableiten hab ich vergessen reinzuschreiben sorry
@Konrad
Hab ich ja geschreiben das es so geht, aber ist das nicht eine c#.. mhh Unschönheit
-
templäd schrieb:
Hab ich ja geschreiben das es so geht, aber ist das nicht eine c#.. mhh Unschönheit
Wieso? Du implementierst es doch explizit, sagst C# also, dass Du es so und nicht anders willst. Wenn Du es anders willst, implementier das Interface halt nicht explizit.
-
templäd schrieb:
Ihr habt beide ableiten hab ich vergessen reinzuschreiben sorry
Ich kapiere diesen Satz nicht. Aber im Zweifel hilft dir wohl das hier weiter.
-
Interessenfrage am Rande: Die Möglichkeit, mit einer Methode ein Interface zu implementieren, dabei diese Methode aber völlig anders zu nennen, gibt es in C# garnicht, oder?
Bsp. VisualBasic:
Public Interface Iface1 Function Length() As Integer End Interface Public Interface Iface2 Function Length() As Integer End Interface Public Class Class1 Implements Iface1 Implements Iface2 Public Function Klaus() As Integer _ Implements Iface1.Length End Function Public Function Dieter() As Integer _ Implements Iface2.Length End Function End Class
-
LordJaxom schrieb:
Interessenfrage am Rande: Die Möglichkeit, mit einer Methode ein Interface zu implementieren, dabei diese Methode aber völlig anders zu nennen, gibt es in C# garnicht, oder?
Korrekt. Allerdings muss man dazu sagen, dass VB und C# hier zwar verschiedene Wege gehen, das Ziel aber eigentlich mehr oder weniger dasselbe ist. Wieso VB hier die Möglichkeit dieser Aliase eingeführt hat, ist mir ehrlich gesagt nicht ganz klar. Ich habe das auch noch nie irgendwo benötigt.