簡體   English   中英

是否有可能已經從某個東西繼承或知道第三個公共類的2個基類?

[英]Is it possible to have 2 Base class's which already inherit from something inherit or know of a third common class?

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

我還能怎么做?

使用組成。

為BaseContentPage和BaseUserControl提供類型為BaseCommon的私有字段(如果需要,可以將其公開為屬性)(不要使其變為靜態)。

他們可以創建BaseCommon,也可以通過構造函數傳入一個實例(依賴注入)。

首先,我認為您不希望BaseCommon屬性是靜態的。 然后,這些屬性在整個應用程序中是全局的,因此從一個實例更改它們將為所有實例更改它們。

您所說的是多重繼承,而c#不支持。 您最好將BaseCommon更改為接口,並讓BaseContentPage和BaseUserControl實現該接口。

如果它們是靜態的,是否意味着該第三類是全局資源? 您可以查看Singleton或IoC容器,也可以在構造實例時將實例傳遞給其他類。

您需要給出更具體的示例,說明要添加到對象繼承樹的兩個不同部分的通用“基本”數據是什么。

可以想象,說每個實例實際上只有相似的數據(例如,我想的例子是國際化,用於根據上下文中特定的短語ID來定制頁面和用戶控件),然后是什么呢?可以做的是實現I18nSettings的I18nSettings類。 然后在每個類中,封裝一個I18nSettings實例並實現II18nSettings並將它們傳遞給它們。 或者,您可以公開內部I18nSettings實例。 我什至只定義了一個接口並讓每個類都實現了它-根本不值得擁有一個單獨的類。

還有其他方法可以做這種事情-它取決於您從中繼承的具體類是否實現比添加的東西有用得多的東西。 從您的具體類繼承並實現其他接口可能更有意義,以便可以在其他地方使用該類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM