현재 저는 독일어 책 "Schrödinger Programmiert C#"을 사용하여 C# 언어로 프로그래밍하고 있으며 코드 예제가 156 페이지에 있습니다. 문제는 다음과 같습니다. 왜 두 번째 방법에서는 정적을 사용하지만 첫 번째 방법에서는 정적을 사용하지 않는지 이해할 수 없습니다.정적 메서드와 개체의 비 정적 메서드 간의 차이점
기본 방법
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();
에서
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;
}
}
Person 클래스 나 차이를 이해하는 데 도움주세요!
WalkedKm은 호출 된 클래스 인스턴스의 상태 (this.Footsteps)에 액세스해야하므로 static으로 선언되지 않습니다. AverageWalkedKm은 클래스 내에 저장된 상태를 사용하지 않으므로 정적 일 수 있습니다. 정적 (Static)은 첨부 된 클래스의 인스턴스를 만들거나 내부 논리와 느슨하게 결합 된 메서드로 복잡하게 만들 필요가 없으므로 선호되는 것으로 간주됩니다. –