我目前正在學習用德語書籍「SchrödingerProgrammiert C#」編程的C#語言,並在頁面156有一個代碼示例。問題是:我不明白爲什麼我在第二種方法中使用靜態而不是第一種方法。對象中的靜態方法和非靜態方法之間的區別
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;
}
}
在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();
請幫助我理解上的差異!
WalkedKm沒有被聲明爲靜態的,因爲它需要訪問它所調用的類的實例的狀態(this.Footsteps)。 AverageWalkedKm可以是靜態的,因爲它不使用類中存儲的任何狀態。靜態被認爲是可取的,因爲你不需要創建它所連接的類的實例,或者使用與其內部邏輯鬆散耦合的方法來處理它。 –