Ich lerne gerade in der Programmiersprache C# mit dem deutschen Buch "Schrödinger Programmiert C#" zu programmieren und auf der Seite 156 gibt es ein Codebeispiel. Das Problem ist: Ich verstehe nicht, warum ich eine statische Methode in der zweiten Methode verwende, aber nicht in der ersten.Unterschied zwischen statischen Methoden und nicht statischen Methoden im Objekt
Klasse Person
class Person
{
public string Name { get; set; }
public float WalkedKm
{
get
{
return this.Footsteps * 0.75f/1000.0f;
}
}
public float Weight { get; set; }
public int Footsteps { get; private set; }
public void Walk (int Footsteps)
{
if (Footsteps > -1)
this.Footsteps += Footsteps;
}
public static float AverageWalkedKm(Person[] persons)
{
int amount = persons.Length;
float walkSum = 0;
foreach (Person p in persons)
walkSum += p.WalkedKm;
return walkSum/(float)amount;
}
}
in der Methode Main
Person p1 = new Person();
Person p2 = new Person();
p1.Name = "Schrödinger";
p2.Name = "Schrödingers Girlfriend";
p1.Walk(1500);
p2.Walk(1500);
p2.Walk(2100);
Person[] person = new Person[] { p1, p2 };
Console.WriteLine("Schrödingers steps: {0}. km {1}", p1.Footsteps, p1.WalkedKm);
Console.WriteLine("Her steps: {0}. km {1}", p2.Footsteps, p2.WalkedKm);
float average = Person.AverageWalkedKm(person);
Console.WriteLine("Average: {0}km", average);
Console.ReadKey();
Bitte helfen Sie mir den Unterschied zu verstehen!
WalkedKm wird nicht als statisch deklariert, da es auf den Status (this.Footsteps) der Instanz der Klasse zugreifen muss, über die es aufgerufen wird. AverageWalkedKm kann statisch sein, da es keinen in der Klasse gespeicherten Status verwendet. Ein Static wird als bevorzugt angesehen, da Sie keine Instanz der Klasse erstellen müssen, mit der er verbunden ist, oder ihn mit Methoden überladen, die nur lose mit seiner internen Logik verbunden sind. –