我有一個類從另一個類繼承,以允許使用可爲空的值。但是,當我以不可爲空的值使用它時,它無論如何都會使用重載爲空。混淆超載分辨率
我不明白爲什麼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