В некотором неясном смысле производный класс, который не добавляет новых функций (пока), ведет себя не так, как его базовый класс. Производный класс:
public class MyCheckButton : CheckButton
{
public MyCheckButton(string label) : base(label)
{
}
}
MyCheckButton наследуется от (GTK #, часть проекта Mono) CheckButton. Однако в следующем фрагменте кода они ведут себя по-разному:
var button1 = new CheckButton("_foo");
var button2 = new MyCheckButton("_foo");
// code omitted
Подчеркивание в метке гарантирует, что метка станет мнемонической. Для button1 это работает в моем тестовом коде: я получаю «foo», где f подчеркнут. Однако для button2 это не удается. Я просто получаю метку "_foo" в своем диалоге.
Может кто-нибудь объяснить, как производный класс в этом примере может вести себя по-другому, или за экраном происходит какое-то волшебство, которое может проверять тип фактического класса?