2013-09-30 2 views
0

У меня возникла проблема с расширением стандартного элемента управления WebControls.Button. Мне нужно переопределить свойство текста, но я получаю сообщение об ошибке:Переопределение свойства «Текст» элемента управления, расширенного от кнопки с использованием C#

не может переопределить член «унаследовал System.Web.UI.WebControls.Button.Text.get», потому что оно не отмечено виртуальным, реферата или переопределение

Я использовал следующий код для LinkButton, и работал отлично:

public class IconLinkButton : LinkButton 
{ 
    private string _icon = ""; 
    public string Icon 
    { 
     get 
     { 
      return _icon; 
     } 
     set 
     { 
      _icon = value; 
     } 
    } 

    public override string Text 
    { 
     get 
     { 
      return "<i class=\""+Icon+"\"></i> " + base.Text; 
     } 
     set 
     { 
      base.Text = value; 
     } 
    } 
} 

Однако, делая то же самое для стандартной кнопки поднимает ошибку, которую я описал выше.

public class IconButton : Button 
{ 
    private string _icon = ""; 
    public string Icon 
    { 
     get 
     { 
      return _icon; 
     } 
     set 
     { 
      _icon = value; 
     } 
    } 

    public virtual string Text 
    { 
     get 
     { 
      return "<i class=\"" + Icon + "\"></i> " + base.Text; 
     } 
     set 
     { 
      base.Text = value; 
     } 
    } 
} 

Как это исправить?

ответ

2

Это потому, что LinkButton имеет virtual Текст собственности .. пока Button нет.

Вы можете скрыть базовую функциональность полностью с помощью new:

public class IconButton : Button { 
    public new string Text { 
     // implementation 
    } 
} 

Использование new полностью скрывает унаследованный элемент.

+0

Будет ли 'base.Text' возвращать свойство« Text »родителей или отменяет его с его собственным? –

+0

Он будет функционировать так, как вы ожидаете. Поскольку в вашем оригинале вы все равно используете его как прокси-сервер для основного унаследованного имущества. –

+0

Спасибо, Саймон, это отлично сработало, и теперь, когда вы это объяснили, это имеет смысл! Примите ответ, как только смогу :) – Dave