gpt4 book ai didi

c# - 将控制权传递给 ASP.NET 中的父类/基类的最佳方式

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

我有一个抽象的 BasePage 类,每个 Page 类都继承自该类。除了核心功能之外,我希望 BasePage 涵盖几乎所有派生类都实现的重复性任务。然而,要做到这一点,BasePage 类必须持有对派生类中定义的控件(下拉列表、 GridView 、菜单...)的引用。

我的问题是,将派生 Page 类中定义的控件引用传递给父类的最佳方式是什么?

以下都不是真正的“最佳”解决方案:

  1. 用于声明名称与派生类上的控件 ID 相同的变量的基页。这会强制 ASP.NET 设计者不要在派生类上重新创建控件。 (我不喜欢这样,因为派生类被迫知道并使用硬编码名称)

  2. 创建抽象属性并强制派生类返回控件引用(缺点:在某些情况下派生类可能不包含此类控件)

  3. 将控件作为函数调用参数传递(缺点:仍然需要重复的函数调用代码。函数本身甚至不必位于 BasePage 上)

最佳答案

一种更面向对象的方法是扩展控件类(下拉列表、 GridView 、菜单...)并为重复性任务添加方法。

如果您必须在 BasePage 中定义控件,那么您可以创建一个 virtual property对于这些在 BasePage 中。任何想要使用它的派生页面都会覆盖它并提供所需的控制。

public class BasePage : System.Web.UI.Page
{
protected virtual DropDownList MyDropDown { get; set; }

protected void PopulateList()
{
if (MyDropDown != null)
MyDropDown.Items.Add("option");
}
}

public partial class MyPage : BasePage
{
protected override DropDownList MyDropDown
{
get
{
return DerivedClassList;
}
set
{
base.DerivedClassList = value;
}
}
}

关于c# - 将控制权传递给 ASP.NET 中的父类/基类的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14168417/

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