C# 是否可以有两个基类';已经从某个对象继承或知道第三个公共类的?

C# 是否可以有两个基类';已经从某个对象继承或知道第三个公共类的?,c#,class,inheritance,static,base,C#,Class,Inheritance,Static,Base,我有两门课 第一班 public class BaseContentPage : System.Web.UI.Page { } 二班 public class BaseUserControl : System.Web.UI.UserControl { } 现在我想让他们知道这门课 public class BaseCommon { public string Variable1 { get; set; } public string Variable2 { get; set;

我有两门课

第一班

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

}
二班

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; }

我还能怎么做呢?

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

您需要给出更具体的示例,说明添加到对象继承树的两个不同部分的公共“基础”数据是什么

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


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

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

您需要给出更具体的示例,说明添加到对象继承树的两个不同部分的公共“基础”数据是什么

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


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

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


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

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

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

使用组合

为BaseContentPage和BaseUserControl提供BaseCommon类型的私有字段(如果需要,可以作为属性公开)(不要将其设置为静态)

它们可以创建BaseCommon,也可以通过构造函数传递实例(依赖项注入)。

使用组合

为BaseContentPage和BaseUserControl提供BaseCommon类型的私有字段(如果需要,可以作为属性公开)(不要将其设置为静态)


它们可以创建BaseCommon,也可以通过构造函数传递实例(依赖项注入)。

嘿,我想说;-)嘿,我正要这么说;-)我不想要全局资源,这就是我不想使用静态的原因。扩展了我关于非全局目标选项的说明。我不想要全局资源,这就是我不想使用静态的原因。扩展了我关于非全局目标选项的说明。