Announcement

Collapse
No announcement yet.

Verständnisproblem mit Zuweisungen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Verständnisproblem mit Zuweisungen

    Hallo Leute!
    Ich hab' hier einen Codeausschnitt, den ich beim Studieren eines Lehrbuches entdeckt habe, der mir ein wenig Probleme bereitet. Es geht um die Zuweisung "Land land = (Land)obj;" in der CompareTo()-Methode. Wie kann ich dieser Variablen schon etwas zuweisen, obwohl sie sich so gesehen doch noch in der selben Klassendifinition aufhält. Würde diese Zuweisung außerhalb der Klasse stattfinden, könnte ich das ja noch nachvollziehen, aber so... Kann man schon innerhalb einer Klasse einfach eine Variable selben Typs deklarieren? Wenn ja, wieso geht das? Nochmal zurück zu obiger Zuweisung. Handelt es sich bei dieser lokalen Variable (Land land) um eine Objektreferenz, der praktisch die Land-Objekte aus der Main-Methode zugewiesen wurden? Also das Array "Land[] laender" an Referenzparameter "object obj" welcher dann gecastet an "Land land" übergeben wird? Angenommen, das stimmt in etwa, was ich hier von mir gebe, dann würde das doch bedeuten, dass statt "Land land" doch eigentlich "Land[] land da stehen müsste, oder? Das sind Anfängerfragen,
    ich weiß, aber ich bin auch noch nicht soweit fortgeschritten und meine Literatur hat für mich auf diese speziellen Fragen nur unzureichende Antworten. Ich denke aber mal, das die Beantwortung der Fragen für mich viel mehr Licht ins Dunkel der Referenz- und Wertetypen bringen wird. Vielen Dank im Voraus!

    Hier der Codeausschnitt:

    Code:
    namespace Landesdaten
    {
        class Land : IComparable
        {
            
            public string name;
            public int flaeche;
            public int einwohner;
    
            public Land(string name, int flaeche, int einwohner)
            {
                this.name = name;
                this.flaeche = flaeche;
                this.einwohner = einwohner;
    
            }
    
            public int CompareTo(object obj)
            {
                Land land = (Land)obj;
                
                if (this.flaeche > land.flaeche)
                    return 1;
                else if (this.flaeche < land.flaeche)
                    return -1;
                else 
                    return 0;
            }
    
            public override string ToString()
            {
                return name + "\t (Fläche:" + flaeche + "km^2," + "Einwohner:" + einwohner + "mio)";
            }
         }   
    
    
        class Program
        {
            static void Main(string[] args)
            {
                Land[] laender = new Land[4];
    
                laender[0] = new Land("Deutschland", 357022, 82);
                laender[1] = new Land("Sri Lanka", 65610, 19);
                laender[2] = new Land("Norwegen", 323877, 5);
                laender[3] = new Land("Ecuador", 283561, 12);
    
                
                
                    Array.Sort(laender);
    
                    foreach (Land l in laender)
                    {
                        Console.WriteLine(l);
                    }
                    Console.WriteLine();
                    Console.ReadLine();
                
            }
        }
    }

  • #2
    public int CompareTo(object obj)
    {
    Land land = (Land)obj;
    Im obigen Quelltext kann die Methode CompareTo mit dem Parameter Objekt obj aufgerufen werden.

    Mit der Zeile

    Land land = (Land)obj;

    wird das "universal" Objekt obj in ein Element der Klasse Land umgewandelt (gecastet). Dazu wird eine neue Instanz der Klasse Land benötigt, der das Objekt dann zugewiesen wird.

    Im weiteren Quelltext wird dann nunmeher verglichen, ob das übergebene, umgewandelte Objekt identisch ist mit dieser Instanz der Klasse Land.

    Wie kann ich dieser Variablen schon etwas zuweisen, obwohl sie sich so gesehen doch noch in der selben Klassendifinition aufhält. Würde diese Zuweisung außerhalb der Klasse stattfinden, könnte ich das ja noch nachvollziehen, aber so... Kann man schon innerhalb einer Klasse einfach eine Variable selben Typs deklarieren? Wenn ja, wieso geht das?
    Dieses neue Objekt ist nicht in der gleichen Instanz der Klasse. Es wird ein neues angelegt.

    Du "siehst" mit der Beschreibung der Klasse im Quelltext quasi die "Vorlage" der Klasse Land. Von dieser "Vorlage" können zu jeder Zeit Instanzen erzeugt werden.
    Zuletzt editiert von Christian Marquardt; 17.06.2008, 21:30.
    Christian

    Comment

    Working...
    X