【问题标题】:Is it possible to have 2 Base class's which already inherit from something inherit or know of a third common class?是否有可能有 2 个基类已经继承自某个继承或知道第三个公共类?
【发布时间】:2010-12-06 12:50:08
【问题描述】:

我有两节课

第 1 课。

public class BaseContentPage : System.Web.UI.Page
{

}

第 2 类。

public class BaseUserControl : System.Web.UI.UserControl
{


}

现在我希望他们知道这个类。

public class BaseCommon 
{
  public string Variable1 { get; set; }
  public string Variable2 { get; set; }
  public string Variable3 { get; set; }
}

我目前的做法是让 BaseCommon 类的变量像这样静态

public static string Variable1 { get; set; }
public static string Variable2 { get; set; }
public static string Variable3 { get; set; }

我还能怎么做?

【问题讨论】:

    标签: c# class inheritance static base


    【解决方案1】:

    使用组合。

    给 BaseContentPage 和 BaseUserControl 一个 BaseCommon 类型的私有字段(如果需要,可以作为属性公开)(不要使其成为静态)。

    他们可以创建 BaseCommon 或通过构造函数传入一个实例(依赖注入)。

    【讨论】:

    • 嘿,我正要这么说 ;-)
    【解决方案2】:

    首先,我认为您不希望 BaseCommon 属性是静态的。然后属性在整个应用程序中是全局的,因此从一个实例更改它们将更改所有实例的它们。

    你说的是多重继承,c#不支持。您最好将 BaseCommon 更改为接口并让 BaseContentPage 和 BaseUserControl 实现该接口。

    【讨论】:

      【解决方案3】:

      如果它们是静态的,这是否意味着第三类是全局资源?您可以查看 Singleton 或 IoC 容器,或者在构造时将实例传递给其他类。

      您需要提供更具体的示例,说明您要添加到对象继承树的两个不同部分的常见“基础”数据是什么。

      可以想象,假设每个实例实际上只有相似的数据(我正在考虑的一个示例是国际化,例如,它用于根据上下文中特定的短语 ID 等自定义页面和用户控件),那么你可以做的是有一个实现 II18nSettings 的类 I18nSettings。然后在每个类中,封装一个I18nSettings实例,实现II18nSettings并传递。或者,您可以公开内部 I18nSettings 实例。我什至刚刚定义了一个接口并让每个类都实现它——根本不值得拥有一个单独的类。

      还有其他选项可以做这种事情——这取决于你继承的具体类是否实现了比你添加的东西更有用的东西。从您的具体类继承并实现其他接口以便可以在其他地方使用该类可能更有意义。

      【讨论】:

      • 我不想要全局资源,这就是我不想使用静态的原因。
      • 扩展了我对非全局目标选项的注释。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-13
      • 2016-01-13
      • 2011-03-07
      • 2012-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多