gpt4 book ai didi

c# - 从 System.Web.UI.UserControl 基类继承

转载 作者:行者123 更新时间:2023-11-30 16:31:01 24 4
gpt4 key购买 nike

首先,我想知道这是否可能。我在互联网上看到了关于这方面的轻微提示,但我并不完全确定。

我的场景:我有一个基本图表类,它有一些所有图表都应该有的方法。

public partial class BaseChart : System.Web.UI.UserControl
{
public BaseChart()
{
}

public void ToggleLegend()
{
Chart1.Legends[0].Enabled = !Chart1.Legends[0].Enabled;
}
}

这个 BaseChart 也有一些标记——设置背景颜色等。所有继承 BaseChart 的图表都应该使用这个起始标记并能够在它的基础上构建。

然后我想这样做:

public partial class HistoricalLineChart : BaseChart
{
public HistoricalLineChart()
: base()
{
}

public HistoricalLineChart(int reportID)
: base()
{
Chart1.Titles[0].Text = "Hello World";
}
}

其中 HistoricalLineChart 是一个没有标记的网络用户控件,例如"历史折线图.ascx"

问题是 Chart1 在 HistoricalLineChart 的范围内是未定义的。我在这里缺少什么吗?

谢谢。

最佳答案

虽然在这种情况下通常最终只是制作一个自定义控件(如另一个答案所建议的),并且出于多种原因这很好,但在复杂标记制作服务器的情况下,还有一些其他方法可能有用控制不可行。

1) 创建一个基类,它具有您的实现所共有的所有功能并继承 UserControl。如果你真的想把标记作为基类的一部分,你可以把它放在一个没有代码的单独的用户控件中,然后从抽象类加载它,虽然这看起来有点难看。但是,如果共享的标记很简单,则只需从代码中呈现即可。

public abstract class MyUserControl: UserControl
{
public Chart Chart1;
public void ToggleLegend()
{
Chart1.Legends[0].Enabled = !Chart1.Legends[0].Enabled;
}
public override void CreateChildControls()
{
Controls.Add(Page.LoadControl("path/to/mymarkup/control"));
// or add them in code
BuildBaseControls();
}
}

2) 创建继承 MyUserControl 而不是 UserControl 的 UserControl 实现,并添加标记

public partial class HistoricalLineChart : MyUserControl
{
public HistoricalLineChart(int reportID)
: base()
{
Chart1.Titles[0].Text = "Hello World";
}
}

您还可以创建一个接口(interface)来描述应该出现在标记中的任何控件并实现它。这很好,因为它为您提供了适用于 UserControl(其中控件在标记中定义)或 WebControl(其中控件在代码中创建)的构造,将标记的实际细节留给每个实现,但是让您共享功能。

关于c# - 从 System.Web.UI.UserControl 基类继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5147955/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com