Interfaces mit gleicher Signatur



  • Hallo zusammen!

    Ich habe folgendes Anfänger-Problem. Wenn ich den nachfolgenden Code ausführen will, erhalte die Fehlermeldung "A field initializer cannot reference the nonstatic field, method, or property `Eins.berechne(int, int)'".

    Was muss ich tun, damit das Progrämmchen funktioniert?

    Vielen Dank!

    Franz

    using System;
    
    interface Eins { int berechne(int a, int b); }
    
    interface Zwei { double berechne(int a, int b); }
    
    interface Drei { int berechne(int a); }
    
    interface Vier { int berechne(int a); }
    
    public class Fünf : Eins, Zwei, Drei, Vier {  
      int Eins.berechne(int a, int b) {
        return a + b;
      }
    
      double Zwei.berechne(int a, int b) {
        return a / b;
      }
    
      int Drei.berechne(int a) {
        return a + a;
      }
    
      int Vier.berechne(int a) {
        return a * 3;
      }
      public class Test {
        public static void Main(String[] args) {
          new BerechnungsTest();
        }
      }
      public class BerechnungsTest {
        int a = Eins.berechne(1, 6);
      }
    }
    


  • Ist das richtig, dass Test und BerechnungsTest innerhalb der Klasse "Fünf" sind?!

    In der Regel kann man sowas machen:

    ((GewünschtesInterface)ObjektDasInterfacesImplementiert).eineInterfaceMethode();
    

    ...über einen Cast auf das Interface kann man quasi sagen welche berechne()-Methode man haben will.



  • Guten Morgen!

    Danke für die Antwort. Auch wenn ich die beiden Klassen Test und BerechnungsTest aus der Klasse Fünf auslagere, erhalte ich den Fehler
    "A field initializer cannot reference the nonstatic field, method, or property `Eins.berechne(int, int)'"

    Den zweiten Punkt habe ich wahrscheinlich nicht richtig verstanden. Ich habe anschließend die Klasse BerechnungsTest folgendermaßen geändert:

    public class BerechnungsTest {
      int a = (Eins) Fünf.berechne(1, 6);
    }
    

    Ergebnis: `Fünf' does not contain a definition for `berechne'

    Viele Grüße!

    Franz



  • Habe dein Beispiel offensichtlich falsch umgesetzt. Klappt aber auch nicht ...

    public class BerechnungsTest {
      int a = ((Eins)Fünf).berechne(1, 6);
    }
    

    Ergebnis: Expression denotes a `type', where a `variable', `value' or `method group' was expected



  • Fünf ist eine Klasse, kein Objekt.



  • public class BerechnungsTest {
      Fünf f = new Fünf();
      int a = ((Eins)f).berechne(1, 6);
    }
    

    führt zum Ergebnis A field initializer cannot reference the nonstatic field, method, or property `BerechnungsTest.f'

    Womit ich wieder bei der Ausgangsmeldung (sh. meinen ersten Post) wäre.

    Franz



  • Vielleicht packst Du den Codeausschnitt mal in eine Methode? 😉



  • Hallo!

    Das war schon mal ein guter Hinweis. Aber trotzdem schaffe ich es nicht.
    Kannst mir jemand mal konkret die Klassen Test und BerechnungsTest zusammenstellen?

    Die Hinweise sind wirklich nett, aber langsam muss ich sagen frustet mich das. Ich möchte aber von C# nicht unbedingt wieder weg.

    Viele Grüße!

    Franz

    public class Test {
      public static void Main(String[] args) {
        BerechnungsTest t = new BerechnungsTest();
        t.Rechnen();
      }
    }
    
    public class BerechnungsTest {
      public void Rechnen() {
        Fünf f = new Fünf();
        int a = (Eins)f.berechne(1, 6);
      }
    }
    

    Ergebnis: Type `Fünf' does not contain a definition for `berechne' and no extension method `berechne' of type `Fünf' could be found (are you missing a using directive or an assembly reference?)



  • Das kann doch wohl nicht dein Ernst sein.
    Du hast wieder falsch gemacht, was Dir oben schon erklärt wurde.

    Kauf Dir ein Buch oder lass es bleiben.



  • ((Eins)f).berechne



  • @geeky und LordJaxom:
    Danke für eure Geduld!


Anmelden zum Antworten