我有一个类从另一个类继承,以允许使用可为空的值。但是,当我以不可为空的值使用它时,它无论如何都会使用重载为空。混淆超载分辨率
我不明白为什么C2类的功能掩盖C1类的功能在这个代码:
class c1
{
public void fn1(int value)
{
Console.WriteLine("value {0} is normal", value);
}
public void fn1(int? value)
{
Console.WriteLine("value {0} is nullable", value);
}
public void fn2(int value)
{
Console.WriteLine("value {0} is normal", value);
}
}
class c2: c1
{
public void fn2(int? value)
{
Console.WriteLine("value {0} is nullable", value);
}
}
class Program
{
static void Main(string[] args)
{
c1 o1 = new c1();
c2 o2 = new c2();
int val = 10;
o1.fn1(val);
o2.fn1(val);
o2.fn2(val);
Console.ReadLine();
}
}
,其结果是:
value 10 is normal.
value 10 is normal.
value 10 is nullable.
然而C2具有功能FN2 (INT)。
有时你可以用投歧义这一点。如果你的fn2函数被交换了,那么用一个强制转换调用将会选择正确的函数o2.fn2((int?)val); – CRice