가능한 중복 : 피터
p.TellYourAge()
및p.DoSomething()
의 호출이되지 않는 이유 선택적 인수를 사용하여 C#의 이상한 동작을 설명 할 수 있습니까?당신이 날 설명 할 수 :Peter: -1 Peter: 0 Fred: 1 Fred: 1
C# optional parameters on overridden methods
이 다음 코드의 출력은 같은? 당신이 ReSharper에서를 사용하는 일이 있다면
static void Main(string[] args)
{
Peter p = new Peter();
p.TellYourAge(); // expected -1, result: -1
p.DoSomething(); // expected -1, result: 0
Fred f = new Fred();
f.TellYourAge(1); // expected 1, result: 1
f.DoSomething(); // expected 1, result: 1
Console.ReadKey();
}
}
public abstract class Person
{
public abstract void TellYourAge(int age); // abstract method without default value
}
public class Peter : Person
{
public override void TellYourAge(int age = -1) // override with default value
{
Console.WriteLine("Peter: " + age);
}
public void DoSomething()
{
TellYourAge();
}
}
public class Fred : Person
{
public override void TellYourAge(int age) // override without default value
{
Console.WriteLine("Fred: " + age);
}
public void DoSomething()
{
TellYourAge(1);
}
}
내 첫번째 추측은 INT 여기에 널 (NULL)이 아니므이다 : 공공 재정의 무효 TellYourAge (INT 연령은 = -1) 기본 값을 오버라이드 (override) //, 그것은 기본은 항상 0입니다 ... – mservidio
@mservidio을하지만 그 이유 기본값을 지정하십시오 –
[이 기사] (http://blogs.msdn.com/b/ericlippert/archive/2011/05/09/optional-argument-corner-cases-part-one)에 관심이있을 수 있습니다. aspx) 에릭 Lippert. 정확한 사례를 설명하지는 않지만 상황에 대한 단서를 제공해야합니다. –