Помощь с переопределением C # .NET - PullRequest
1 голос
/ 31 марта 2011

Мне нужно переопределить Tabcontrol GetTabRect.

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

Я получаю эту ошибку

Ошибка 1 'TabControl.GetTabRect (int)': не может изменить модификаторы доступа, когда переопределение "публичного" унаследованного члена 'System.Windows.Forms.TabControl.GetTabRect (интермедиат)'

Error2'TabControl.GetTabRect (интермедиат) ': не может переопределить унаследованный член 'System.Windows.Forms.TabControl.GetTabRect (целое)' потому что он не помечен как виртуальный, аннотация или переопределение

Как я могу это сделать?

EDIT

если я использую public:

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

Ответы [ 4 ]

4 голосов
/ 31 марта 2011

Метод публичный. Таким образом, вы не можете сделать его защищенным, когда переопределяете его. Таким образом, вы должны держать публичную видимость.

Это должно выглядеть так:

public override Rectangle GetTabRect(int index)
2 голосов
/ 31 марта 2011

Проблема в том, что вы фактически скрываете функцию с помощью переопределения.Вам необходимо поддерживать public характер функции, поскольку вы не можете изменить сигнатуру при переопределении метода.

0 голосов
/ 31 марта 2011

Метод TabControl.GetTabRect() является общедоступным и не виртуальным, поэтому вам может потребоваться найти другое решение проблемы, которую вы пытаетесь решить. Даже если вы переопределите этот метод с помощью ключевого слова new, базовый класс все равно не будет вызывать вашу реализацию, потому что это не виртуальная функция.

Вы можете попробовать обработать событие DrawItem и визуализировать вкладку самостоятельно - возможно, это больше работы, но она дает вам контроль над тем, как вкладка отображается, и тогда вы можете использовать любой ограничивающий прямоугольник, какой захотите.

Что вы пытаетесь сделать, для чего нужен переопределенный метод GetTabRect()?

0 голосов
/ 31 марта 2011

Полученное сообщение об ошибке ясно указывает на то, что вы не можете ограничить / изменить доступ при переопределении метода. Вы можете переопределить его как Public. Есть ли конкретная причина, почему вы хотите, чтобы ваш GetTabRect был защищен?

...