संभव डुप्लिकेट:क्या आप वैकल्पिक तर्कों के साथ सी # के इस अजीब व्यवहार को समझा सकते हैं?
Peter: -1 Peter: 0 Fred: 1 Fred: 1
तुम मुझे बता सकते हैं क्यों पीटर
p.TellYourAge()
औरp.DoSomething()
की कॉल नहीं है:
C# optional parameters on overridden methods
यह निम्नलिखित कोड का उत्पादन होता है समान?
यहाँ कोड यह अपने आप का प्रयास करने के (VS2010 और परिवार कल्याण 4):
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);
}
}
मेरा पहला अनुमान है कि पूर्णांक यहां नल नहीं है, क्योंकि यह है: सार्वजनिक ओवरराइड शून्य TellYourAge (पूर्णांक उम्र = -1) // डिफ़ॉल्ट मान के साथ ओवरराइड, यह डिफ़ॉल्ट हमेशा 0 है है ... – mservidio
@mservidio लेकिन इसका कारण यही है आप डिफ़ॉल्ट मान –
निर्दिष्ट करते हैं, आपको [इस आलेख] में दिलचस्पी हो सकती है (http://blogs.msdn.com/b/ericlippert/archive/2011/05/09/optional-argument-corner-cases-part-one। एएसपीएक्स) एरिक लिपर्ट द्वारा। यद्यपि यह सटीक उसी मामले का वर्णन नहीं करता है, यह आपको क्या हो रहा है इसके बारे में कुछ संकेत देना चाहिए। –