重构ASP.NET - 两个控件都从Web.UI.UserControl继承并具有相同的属性

时间:2011-03-13 22:47:24

标签: c# asp.net user-controls

我目前有这段代码,我知道这段代码非常糟糕,我想尽可能简单地重构它。

if (control as HistoricalLineGraph != null)
{
    dock.Title = string.Format(format, dock.ChartName, (control as HistoricalLineGraph).Title);
}
else if (control as HistoricalPieGraph != null)
{
    dock.Title = string.Format(format, dock.ChartName, (control as HistoricalPieGraph).Title);
}

HistoricalLineGraph和HistoricalPieGraph都继承自System.Web.UI.UserControl。

public partial class HistoricalLineGraph : System.Web.UI.UserControl
public partial class HistoricalPieGraph : System.Web.UI.UserControl

他们都有这个吸气剂:

public string Title
{
    get { return Chart1.Titles[0].Text; }
}

由于获取标题依赖于实例化Chart1,因此不能(轻松)将此getter提取到公共基类。我相信我需要使用复合控件做这样的事情,但我并不完全正面,因为我还没有深入探讨这个解决方案。

是否有可能做一些类似于创建一个继承自System.Web.UI.UserControl并具有Title的抽象getter然后被我的上述每个类重写的中间类的东西?如果没有,我的其他选择是什么?

感谢。

2 个答案:

答案 0 :(得分:3)

您可以创建一个界面

public interface ITitledControl
{
       string Title {get;}
}

并使用

public partial class HistoricalLineGraph : System.Web.UI.UserControl, ITitledControl
public partial class HistoricalPieGraph : System.Web.UI.UserControl, ITitledControl

并执行此操作

if (control is ITitledControl)
{
    dock.Title = string.Format(format, dock.ChartName, (control as ITitledControl ).Title);
}

答案 1 :(得分:0)

我实际上会说你最好的选择是创建一个控件实现的界面。这意味着您可以根据需要进行自定义实现,只需将控件转换为您的界面并获取标题。