Olası Çoğalt: Peter
p.TellYourAge()
vep.DoSomething()
çağrısı değil neden İsteğe bağlı argümanlar ile C# 'un bu garip davranışını açıklayabilir misiniz?Beni açıklayabilir:Peter: -1 Peter: 0 Fred: 1 Fred: 1
C# optional parameters on overridden methods
Bu aşağıdaki kod çıkışı özdeş? Eğer Resharper kullanıyoruz edersek
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);
}
}
Benim ilk tahminim int burada null olmadığından şudur: public override void TellYourAge (int yaş = -1) varsayılan değerle geçersiz //, varsayılan her zaman 0'dır var ... – mservidio
@mservidio Ama işte bu yüzden varsayılan değeri belirtin –
Bu makale ilginizi çekebilir [http://blogs.msdn.com/b/ericlippert/archive/2011/05/09/optional-argument-corner-cases-part-one. aspx) tarafından Eric Lippert. Tam olarak aynı davayı açıklamamasına rağmen, neler olduğu konusunda size bazı ipuçları vermelidir. –