c# - 如何在页面和母版页之间共享代码而无需多重继承/代码重复?

标签 c# asp.net master-pages multiple-inheritance code-duplication

我读过questions/answers解释说,C#中没有多重继承,我们甚至不需要它,并且它会引起太多问题。

现在,我正在一个项目中工作,在这个项目中,我不太了解如何在没有多重继承的情况下完成工作,又没有重复的代码。

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

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

那么该怎么做呢?

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


创建一个独立的类,该类将从页面/母版页类中调用。因此,例如,我会写bool isDisplayingTips = this.CurrentUser.IsDisplayingTips而不是写bool isDisplayingTips = this.SharedObjects.CurrentUser.IsDisplayingTips。我不喜欢它,因为它写的时间更长。
创建一个“真实的”,空的,通用的母版页,并从其继承首页和母版页。它不仅需要编写更多的代码来访问母版页参数,而且还会降低速度,在每个请求上都需要一个额外的母版页。


任何的想法?

最佳答案

MasterPage是一个公正的控件(已嵌入到实际页面中),因此您无法采用后一种方法。但是,创建另一个助手类的第一种方法是完全可行的。

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


通用基础页面类-所有页面都将从通用基础页面继承。
将通用功能放在基本页面类中
在母版页中,可以通过强制转换来引用基本页-例如,myBasePage = (BasePage)this.Page;。这样,母版页可以访问基类中的常用功能。

关于c# - 如何在页面和母版页之间共享代码而无需多重继承/代码重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3699827/

相关文章:

javascript - 在后台加载页面不会在数据库中插入数据

asp.net - 如何解决找不到 ContentPlaceHolder 错误?

c# - asp.net 母版页 css 不适用于 asp 表单页面

c# - 为什么 typeof(Foo) 会返回 null?

c# - 填充列表的通用方法无法创建 T()

asp.net windows 身份验证

javascript - 母版页 CSS 和 Javascript 不起作用

c# - 如何使用 IFileOperation?

c# - 如何在 C# 中进行 "minimal match"正则表达式搜索?

asp.net - 什么取代了 WCF RIA 服务的功能?