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.


Anmelden zum Antworten