Jump to content
Unity Insider Forum

SirTreffNix_Dev

Members
  • Gesamte Inhalte

    12
  • Benutzer seit

  • Letzter Besuch

Beiträge erstellt von SirTreffNix_Dev

  1. Zitat

    Da sehe ich dann aber nicht, was mir die Vererbung bringen soll. Da kann ich ja gleich in der Klasse alles neu schreiben.

    Die Vererbung bietet dir ja die Möglichkeit auch Methoden der Klasse von der du erbst zu nutzen.

    z.B. könntest du in deiner Klasse "Mensch" Variablen für Lebenspunkte, Erfahrungspunkte usw. haben. Deine Klasse Supermensch hat dann z.B. Variablen und Methoden für Superkräfte die gewisse Dinge tun.

    Deine Klasse Mensch hat aber z.B. bereits Methoden um Lebenspunkte hinzuzufügen, abzuziehen usw. Diese müsstest du dann in der Klasse Supermensch nicht noch einmal schreiben sondern könntest die Methode aus der Basisklasse verwenden.

    Solltest du dann doch einmal eine Methode aus der Basisklasse "Mensch" ändern wollen in "Supermensch" kannst du diese "überschreiben" oder "erweitern".

    Override - https://docs.microsoft.com/de-de/dotnet/csharp/language-reference/keywords/override

     

    • Like 1
  2. Mit der Zeile:

     

    public SuperMensch (int dasAlter, string derName, string dieFaehigkeit) :base(dasAlter, derName, derBeruf)

     

    übergibst du dasAlter, derName, derBeruf an den Konstruktor der Basisklasse (durch die Verwendung von :base(dasAlter,derName,derBeruf) der in diesem Fall 3 Argumente erwartet. "derBeruf" ist aber unbekannt, da an den Konstruktor von SuperMensch die Variablen "dasAlter, derName, dieFaehigkeit" übergeben werden.

    Das sagt die folgende Fehlermeldung aus:

    Zitat

    Assets/03_C#_Grundlagen/Scripts/S31ConstructorUndVererbung.cs(57,102): error CS0103: The name `derBeruf' does not exist in the current context

    Wenn du dann wie von dir Beschrieben "derBeruf" wieder raus nimmst, werden wieder nur zwei Argumente an den Konstruktor der Basisklasse übergeben. Dadurch erhälst du die folgende Fehlermeldung:

    Zitat

    Assets/03_C#_Grundlagen/Scripts/S31ConstructorUndVererbung.cs(57,78): error CS1729: The type `Mensch' does not contain a constructor that takes `2' arguments

     

    In dem Screenshot aus deinem Tutorial sind gar keine Konstruktoren angegeben wodurch das "Problem" nicht entsteht.

    Der Konstruktor wird immer aufgerufen, wenn ein neues Objekt vom Typ dieser Klasse erstellt wird über z.B. SuperMensch test = new SuperMensch()

    Es besteht die Möglichkeit für jede Klasse mehrere Konstruktoren anzugeben. Dann wird je nachdem welche Parameter übergeben werden der richtige "ausgewählt".

    Wenn du nun über

    public Mensch()
    {
    
    }

    einen weiteren Konstruktor der Klasse Mensch hinzufügst, kann ein Objekt vom Typ Mensch entweder über

    Mensch test1 = new Mensch() // ohne Argumente
    
    oder mit
    
    Mensch test2 = new Mensch(100, "Superman", "fliegen") // mit Argumente

    erstellt werden. Da in diesem Fall, die Klasse Mensch keine Argumente zwingend erwartet (es wird ja entweder der Konstruktor ohne Argumente aufgerufen oder eben mit drei Argumenten) kann deine Klasse SuperMensch von Mensch erben ohne Argumente zu übergeben.

     

    Das ganze ist auch ganz gut unter: https://docs.microsoft.com/de-de/dotnet/csharp/programming-guide/classes-and-structs/using-constructors beschrieben.

    Ich hoffe ich konnte es einigermaßen verständlich beschreiben.

  3. Auf dem Screenshot von deinem Code, hat die Klasse Mensch einen Konstruktor, der drei Argumente erwartet.

    Durch die Vererbung musst du den Konstruktor der Basisklasse bedienen. Dieser erwartet zwingend drei Argumente. Entweder du erstellst in der Basisklasse zusätzlich einen Konstruktor, der 0 Argumente akzeptiert oder du übergibst die Argumente mit dem Schlüsselwort "base" an die Basisklasse.

    Vereinfacht dargestellt entweder:

        public class Mensch
        {
            public Mensch(int dasAlter, string derName, string derBeruf)
            {
    
            }
    
            public Mensch()
            {
    
            }
        }
    
        public class SuperMensch : Mensch
        {
            public SuperMensch(int dasAlter, string derName, string dieFaehigkeit)
            {
    
            }
        }

     

    oder:

        public class Mensch
        {
            public Mensch(int dasAlter, string derName, string derBeruf)
            {
    
            }
        }
    
        public class SuperMensch : Mensch
        {
            public SuperMensch(int dasAlter, string derName, string dieFaehigkeit, string derBeruf) : base (dasAlter, derName, derBeruf)
            {
    
            }
        }

     

     

×
×
  • Neu erstellen...