4
我想我有我懷念概念。我嘗試通過替換公共函數來覆蓋子類中的類的行爲。在下面的程序中,我期望將「B」寫入控制檯,但程序打印出「A」。我認爲哪裏錯了?我怎麼能實現它。 (在我的真實情況下,我不能改變A類)。隱藏成員函數不起作用
class Program
{
class A { public void F() { Console.WriteLine("A"); } }
class B : A { public new void F() { Console.WriteLine("B"); } }
static void Main(string[] args)
{
A x;
x = new B();
x.F();
Console.ReadLine();
}
}
如果你想讓它工作,你必須聲明F爲虛擬 – BlackBear
如果你想了解更多關於隱藏的知識,我推薦閱讀:[link](http://www.codeproject.com/Articles/18733/方法隱藏式-C)。 – aloisdg
因爲'x'是類型'A'(即使它用'B'初始化),編譯器首先在那裏搜索函數,然後它會運行A.F()函數。如果該功能直接在該類型上運行,則只隱藏該成員。通過用派生類型和隱藏函數覆蓋它,然後將它傳遞給基類型的操作,你不能真正將功能注入到基類型中,它不會像那樣工作。 –