Trong một số cách mơ hồ, một lớp dẫn xuất không thêm chức năng mới (chưa) hoạt động khác với lớp cơ sở của nó. Lớp dẫn xuất:Tại sao lớp dẫn xuất này hoạt động khác với lớp cơ sở của nó
public class MyCheckButton : CheckButton
{
public MyCheckButton(string label) : base(label)
{
}
}
MyCheckButton kế thừa từ (GTK #, một phần của dự án Mono) Nút kiểm tra. Tuy nhiên, trong đoạn mã sau, chúng hoạt động khác nhau:
var button1 = new CheckButton("_foo");
var button2 = new MyCheckButton("_foo");
// code omitted
Dấu gạch dưới trong nhãn đảm bảo nhãn bị ghi nhớ. Đối với button1, nó hoạt động trong testcode của tôi: Tôi nhận được "foo" trong đó f được gạch dưới. Tuy nhiên đối với button2 này không thành công. Tôi chỉ nhận được "_foo" như một nhãn trong hộp thoại của tôi.
Bất cứ ai có thể giải thích làm thế nào lớp dẫn xuất trong ví dụ này có thể hoạt động khác hoặc có một số ma thuật xảy ra phía sau màn hình có thể kiểm tra loại của lớp thực tế?
Là mã này MyCheckButton được tất cả các trình bày ở đây ? – Tigran
Nếu bạn không thêm button1 thì sao? Có lẽ nó không giống như hai 'f' mnemonics? – dlev
Có, đây là tất cả mã. Tôi đã làm ví dụ đơn giản nhất có thể. Hai phép nhớ giống nhau không phải là vấn đề. Tôi đã thử điều đó. –