1

我已经阅读了解释C# 中没有多重继承的问题/答案,我们甚至不需要它,而且它会导致太多问题。

现在,我正在做一个项目,我真的不明白如何在没有多重继承、不重复代码的情况下做事。

这是情况。有一个网站,其主页和其他页面继承自母版页(主页不继承自)。页面和母版页都在执行一些操作:自定义登录、统计信息、加载用户自定义设置等。目前,解决方案很糟糕,因为这些任务的源代码只是复制了两次

主页类继承自Page. 另一方面,母版页继承自Masterpage. 从逻辑上讲,从一个公共类继承也很好,但它是多重继承,所以这是不可能的。

那么该怎么做呢?

我想了几种方法,但不喜欢它们:

  • 创建一个将从 page/masterpage 类调用的独立类。例如bool isDisplayingTips = this.CurrentUser.IsDisplayingTips,我不写,而是写bool isDisplayingTips = this.SharedObjects.CurrentUser.IsDisplayingTips。我不喜欢它,因为它要写更长的时间。

  • 创建一个“真实的”、空的、通用的母版页,并从中继承主页和母版页。它不仅需要编写更多代码来访问母版页参数,而且还会减慢速度,每次请求都需要额外的母版页。

任何的想法?

4

4 回答 4

8

MasterPage 是一个公正的控件(嵌入到实际页面中),因此您不能使用后一种方法。但是,创建另一个助手类的第一种方法是非常可行的。

我们通常使用的另一种方法是

  1. 公共基页类 - 所有页面都将从公共基页继承。
  2. 将通用功能放在基页类中
  3. 从母版页,可以通过强制转换来引用基页 - 例如,myBasePage = (BasePage)this.Page;. 这样母版页可以从基页类访问常用功能。
于 2010-09-13T11:34:22.530 回答
1

我不觉得你的第二个选项不讨人喜欢。

我假设您的意思是创建一个基类,例如MasterPageBase,派生自System.Web.UI.MasterPage,并为您的主页创建一个空的 MasterPage,它将继承自 this MasterPageBase

如果做得好,它不应该减慢速度......

于 2010-09-13T11:34:15.620 回答
1

我建议您使用第一个选项。如果您(可以理解)对增加的间接级别不满意,您可以在独立类上创建新方法,例如:

public bool IsDisplayingTips(){
    return CurrentUser.IsDisplayingTips;
}

并且从您的页面中调用

bool isDisplayingTips = this.SharedObjects.IsDisplayingTips()
于 2010-09-13T11:37:30.990 回答
1

采用:

将从页面/母版页类调用的独立类

但不要停在那里,而是添加一个基本页面和一个基本母版页。两者都使用共享类,并保持特定页面/母版页代码不受间接影响。

于 2010-09-13T21:19:54.427 回答