我有2个班级
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; }
我还能怎么做?
答案 0 :(得分:5)
使用构图。
给BaseConmonPage和BaseUserControl一个BaseCommon类型的私有字段(可以作为属性公开)(不要使它成为静态)。
他们可以创建BaseCommon或通过构造函数传递实例(依赖注入)。
答案 1 :(得分:1)
首先,我认为你不希望BaseCommon属性是静态的。然后,属性在整个应用程序中是全局的,因此从一个实例更改它们将为所有实例更改它们。
你所谈论的是多重继承,而c#不支持它。你最好将BaseCommon更改为一个接口,并让BaseContentPage和BaseUserControl实现该接口。
答案 2 :(得分:0)
如果它们是静态的,这是否意味着第三类是全局资源?您可以查看Singleton或IoC容器,或在构造时将实例传递给其他类。
您需要提供更具体的示例,说明您要添加到对象继承树的两个不同部分的常见“基础”数据。
可以想象,假设每个实例都有类似的数据(我想到的一个例子就是国际化,比如用于根据短语ID定制页面和用户控件等,这在上下文中是特定的),那你可以做的是有一个I18nSettings类来实现II18nSettings。然后在每个类中,封装一个I18nSettings实例并实现II18nSettings并传递它们。或者,您可以公开内部I18nSettings实例。我甚至只是定义了一个接口并让每个类实现它 - 根本不值得拥有一个单独的类。
还有其他选择可以做这种事情 - 这取决于你继承的具体类是否比你添加的东西实现了更多有用的东西。从您的具体类继承并实现其他接口可能更有意义,以便该类可以在其他地方使用。