Was, wenn Klasse von zwei Interfaces ableitet, die denselben Funktionskopf haben?



  • Was macht man, wenn man zwei Interfaces hat, die denselben Funktionskopf beinhalten, obwohl die Funktionen rein logisch nichts miteinander zu tun haben? Wie kann man die in der abgeleiteten Klasse unterscheiden?

    interface Mathematik
    {
    	int GetProdukt(int faktor1, int faktor2);
    }
    
    interface Regal
    {
    	int GetProdukt(int reihe, int spalte);
    }
    
    class RegalDasRechnenKann : Mathematik, Regal
    {
    	int[,] regal = new int[10, 5];
    
    	// Das hier geht nicht:
    
    	public int Mathematik.GetProdukt(int faktor1, int faktor2)
    	{
    		return faktor1 * faktor2;
    	}
    
    	public int Regal.GetProdukt(int reihe, int spalte)
    	{
    		return regal[reihe, spalte];
    	}
    
    	// Was ist also zu tun?
    }
    


  • Doch das geht, du musst nur das Public weglassen und dir dann eine Interfacereferenz rauscasten

    RegalDasRechnenKann neues = new RegalDasRechnenKann();
    Regal reg = (Regal)neues;
    reg.GetProdukt(100,100);
    

    Also das Interface explizit implementieren.



  • @Firefighter:
    ???
    So ganz verstanden hast du das auch nicht, was?

    @Austin Powers:
    Lern mal lesen.
    Vielleicht kannst du dann auch irgendwann die Fehlermeldungen vom Compiler lesen. Explizite Interface-Implementierungen können nicht public sein. Also nimm das public weg, und gut.



  • @hustbaer:
    Weiß grad nich so genau was du meinst.Wenn ich ein Interface explizit implementiere, habe ich keine andere Wahl als so wie ich es gezeigt habe auf die Funktionen zuzugreifen.
    Ansonsten klär mich auf was du meinst, anstatt nur hinzuschreiben das man es nicht verstanden hat.



  • Vielleicht steh' auch ich auf dem Schlauch.

    Ich hatte es so verstanden dass er wissen will wie man diese Interface-Methoden dann getrennt implementieren kann, nicht wie man sie aufrufen kann.

    Zumindest zeigt er den Versuch sie zu implementieren, und schreibt es geht nicht. Weil da eben "public" steht, wo kein "public" stehen darf.

    EDIT: Vielleicht hab' ich auch überlesen dass du bereits "das publich weglassen" geschrieben hast...
    D.h. falls das gestern schon dort stand, hab ich es sicher überlesen.



  • Achso dann haben wir uns beide falsch verstanden:D
    Ja jetzt wo du es sagst habe ich die Frage anders beantwortet als er es wahrscheinlich haben wollte. Aber ja, lass das public weg dann gehts und wie man es benutzt siehst du auch direk 😃
    Sorry hustbaer fürs missverständnis.

    EDIT: jo stand gestern schon da.:D



  • Firefighter schrieb:

    Sorry hustbaer fürs missverständnis.

    EDIT: jo stand gestern schon da.:D

    Dann von mir sorry für das Missverständnis! War ja nicht falsch was du geschrieben hast, nur ich hab den wichtigen Teil überlesen.



  • Also, was ich eigentlich gemeint habe, war folgendes (irgendwie hat das Forum da zusätzliche Zeichen reingehauen, die dann ganz zufällig einen tatsächlichen Text darstellten):

    Austin Powers schrieb:

    Was macht man, wenn man zwei Interfaces hat, die denselben Funktionskopf beinhalten

    Also im wesentlichen wollte ich wissen: Was mach ich, wenn ich eines Morgens aufwache und so hier aussehe?
    Aber ich hab mich sowieso im Forum geirrt. Ich dachte, C++ würde für "Zehen und mehr" stehen, also ein Medizinratgeberforum. Wer soll denn wissen, dass das was mit Programmierung zu tun hat? Und beim Unterforumsnamen "C# und .NET" dachte ich an "Scharf sehen" (weil ich ja jetzt mit den vielen Augen ein Problem habe, da ich nicht nur in eine Richtung, sondern in alle gucke) und das dann eben als Vernetzung unter verschiedenen Ärzten.



  • Das is mal ein orgineller Trollpost :p



  • ROFL

    Das ist der beste Post seit langem - habe selten so laut gelacht.


Anmelden zum Antworten