如何在没有多重继承/代码重复的情况下在Pages和Masterpages之间共享代码?

Ars*_*nko 1 c# asp.net master-pages code-duplication multiple-inheritance

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

现在,我正在开发一个项目,我不知道如何在没有多重继承的情况下执行操作,而无需重复代码.

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

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

那又怎么办呢?

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

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

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

任何的想法?

Vin*_*ayC 8

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

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

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