日期:2014-05-18  浏览次数:20383 次

继承与重用问题
有下面三个类:

C# code
public class Common{

}


C# code
public class BaseMasterPage : System.Web.UI.MasterPage{
    //这里几乎用到 Common 里的所有方法和属性
}


C# code
public class BasePage : System.Web.UI.Page{
    //这里几乎用到 Common 里的所有方法和属性
}


BaseMasterPage 从 System.Web.UI.MasterPage 继承,BasePage 从 System.Web.UI.Page 继承。在 BaseMasterPage 和 BasePage 都会大量用到 Common 里的属性和方法。要怎么做才最便于调用、最方便修改、最合理呢?

第一种:继承。但类不能多重继承,因此 BaseMasterPage 不能同时继承 System.Web.UI.MasterPage 类和 Common 类,这个方法不可行。如果说用 ICommon 接口来实现多继承,但也需要在 BaseMasterPage 和 BasePage 里分别实现一次接口,等于同一个方法写两次,修改时就不方便了。

第二种:在 BaseMasterPage 和 BasePage 里把 Common 类里的方法和属性再写一次,然后通过实例化 Common 调用或直接把 Common 写成静态类调用来实现,这跟实现两次接口好象没多少区别,好处是如果要修改,只需要修改 Common 类就行了,不需要同时修改 BasePage 和 BaseMasterPage 类。

第三种:在 BaseMasterPage 和 BasePage 里实例化一个公共的 Common 实例,然后调用时通过这个实例调用 Common 里的方法和属性。或者也可以将 Common 写成静态来直接调用。目前看来,好象这种是最方便、最利于修改的了。




不知道还有没有其他办法,或者以上哪种方法最可行。

------解决方案--------------------

帮你顶贴了。
我认为你已经找到了最好的解决方案(第三种)了。
------解决方案--------------------
根据情况(两个派生类),目前第三种比较适合,方便。

但在复杂或大项目中要考虑接口编程了。

现在有很多种重用的实现方法,为的就是让程序内部达到最大的'优化'(条理清晰,便于调用和维护,易于扩展等等),

实际上也是一种对类的要求,程序员在努力做到:
1. 让一个类一个文件只做一件事情。
2. 在运行时可以随意更换。

当然这些要求就和数据库3范式一样,有些时候鉴于各种情况(特殊喜好,特殊要求,特殊结构等等),我们需要打破3范式,打破一些规矩用来
提高'效率'。