Bantuan Dengan Mengganti C# .NET

Saya perlu mengganti Tabcontrol GetTabRect.

  protected override Rectangle GetTabRect(int index)
    {...}

Saya menerima kesalahan ini

Kesalahan 1 'TabControl.GetTabRect(int)': tidak dapat mengubah pengubah akses saat mengganti anggota warisan 'publik' 'System.Windows.Forms.TabControl.GetTabRect(int)'

Error2'TabControl.GetTabRect(int)': tidak dapat mengganti anggota yang diwarisi 'System.Windows.Forms.TabControl.GetTabRect(int)' karena tidak ditandai virtual, abstrak, atau override

Bagaimana saya bisa melakukan ini?

Sunting

jika saya menggunakan publik:

TabControl.GetTabRect(int)': cannot override inherited member 'System.Windows.Forms.TabControl.GetTabRect(int)' because it is not marked virtual, abstract, or override

person Ste    schedule 30.03.2011    source sumber
comment
Metode ini tidak ditandai sebagai virtual sehingga Anda tidak dapat menimpanya (terlepas dari pengubah aksesnya)   -  person BrokenGlass    schedule 31.03.2011
comment
@Ste: Itu tidak dimaksudkan untuk ditimpa   -  person BrokenGlass    schedule 31.03.2011
comment
Tidak bisakah dia menggunakan Rectangle GetTabRect(int indeks) publik yang baru?   -  person RoflcoptrException    schedule 31.03.2011
comment
@Roflcoptr: Itu akan menyembunyikan metode kelas dasar, tetapi tidak menimpa - itu berarti jika Anda mengakses kelasnya dengan referensi yang diketik ke kelas dasar, metode kelas dasar akan tetap mengeksekusi.   -  person BrokenGlass    schedule 31.03.2011


Jawaban (4)


Metode TabControl.GetTabRect() bersifat publik dan non-virtual sehingga Anda mungkin perlu mencari solusi lain untuk masalah yang Anda coba selesaikan. Bahkan jika Anda mengganti metode ini menggunakan kata kunci new, kelas dasar tetap tidak akan memanggil implementasi Anda karena ini bukan fungsi virtual.

Anda dapat mencoba menangani acara DrawItem dan merender tab sendiri - ini mungkin lebih berhasil tetapi memberi Anda kendali atas bagaimana tab dirender dan kemudian Anda dapat menggunakan persegi panjang pembatas apa pun yang Anda inginkan.

Apa yang Anda coba lakukan yang memerlukan metode GetTabRect() yang diganti?

person xxbbcc    schedule 30.03.2011

Metodenya bersifat publik. Jadi Anda tidak bisa membuatnya terlindungi saat Anda menimpanya. Jadi, Anda harus menjaga visibilitas publik.

Seharusnya terlihat seperti ini:

public override Rectangle GetTabRect(int index)
person RoflcoptrException    schedule 30.03.2011
comment
Tentu saja +1 dan berbicara kode bijaksana itu berarti memiliki public override Rectangle GetTabRect(int index) - person Shadow Wizard Wearing Mask V2; 31.03.2011
comment
bersorak, perlu diingat hal-hal yang jelas itu tidak jelas bagi semua orang. :-) - person Shadow Wizard Wearing Mask V2; 31.03.2011

Masalahnya adalah Anda secara efektif menyembunyikan fungsi tersebut dengan penggantian Anda. Anda perlu mempertahankan sifat public dari fungsi tersebut karena Anda tidak dapat mengubah tanda tangan saat Anda mengganti suatu metode.

person Aren    schedule 30.03.2011

Pesan kesalahan yang Anda terima sepertinya dengan jelas menyatakan bahwa Anda tidak dapat membatasi/mengubah akses saat Anda mengganti metode ini. Anda dapat menimpanya sebagai Publik. Apakah ada alasan khusus mengapa Anda ingin GetTabRect Anda perlu dilindungi?

person Sabitha    schedule 30.03.2011