我目前有这段代码,我知道这段代码非常糟糕,我想尽可能简单地重构它。
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然后被我的上述每个类重写的中间类的东西?如果没有,我的其他选择是什么?
感谢。
答案 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)
我实际上会说你最好的选择是创建一个控件实现的界面。这意味着您可以根据需要进行自定义实现,只需将控件转换为您的界面并获取标题。