2013-09-30 46 views
0

我遇到了擴展標準WebControls.Button控件的問題。我需要重寫文本屬性,但我收到錯誤消息:使用C#覆蓋從按鈕擴展的控件的「文本」屬性

不能覆蓋inhereted成員「System.Web.UI.WebControls.Button.Text.get」,因爲它未標記的虛擬,抽象或重寫

我用一個LinkBut​​ton下面的代碼,並完美地工作:

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