[英]How many classes can you inherit from in C#?
C#不支持多重繼承(意味着單個類繼承自多個類)。 但是,您可以在單個類中實現多個接口。
就將繼承的類鏈接在一起而言,本身沒有限制。 請記住您將為系統引入的復雜性。 使用繼承時,請確保在“是”方案中使用它。 cheeta是一種動物。 馬自達是一輛汽車。 否則,您的繼承會將您的類與設計變得更加難以維護。
如果它們是靜態“實用程序”方法,則只需直接調用它們而不繼承。 除非這些方法屬於您正在創建的實體,否則不應使用繼承。
您只能從單個類繼承。 然而,可以實現多個接口。
假設你有Utils.cs:
internal class Utils {
public static void Log(string str) {
// log str to a file...
}
}
並且有一個DB.cs使用Log方法,並在與Utils類相同的命名空間中:
public class DB {
public void SaveToDB() {
// some db operations
Utils.Log("DB operation successful");
}
}
由於Log方法是靜態的,因此您無需初始化Utils類即可使用此方法。
作為結論,您不能使用多重繼承,但對於您的情況,您不需要這樣做。 您可以使用靜態方法而無需多重繼承。
你不能在C#中做多重繼承。
如果不是因為您想要共享靜態方法,則可以使用接口實現相同的目的。
您可以在“鏈”中繼承所需的多個類,但.NET語言不允許多重繼承。
您在.NET中進行多重繼承的唯一選擇是接口。
只要適當地設置了訪問器,靜態方法或多或少都是共享的(實際上,它們使用VB中的共享關鍵字); 它們與哪個類沒有區別,因為它們與任何實例化對象斷開連接。
要調用靜態方法,請在其前面加上聲明它的類的名稱:
MyClass.MyUtilityMethod();
訪問者必須是public
或者如果調用者和方法在同一個項目/程序集中,它可以是internal
的。
如果您的目標僅僅是為靜態方法創建單一訪問點,則可以創建一個根據需要轉發調用的類:
public static class SharedMethods
{
public static void SharedMethod1()
{
ClassA.SharedMethod1();
}
public static string GetName()
{
return NameProvider.GetName();
}
public static int GetCount()
{
return CountClass.GetCount();
}
}
這樣您就可以通過SharedMethods.GetName()
等訪問所有內容。
在.NET中,您只能從一個基類繼承,但實現多個接口。
對於像您一樣的ASP.NET特定情況,您可以執行以下操作:
public class BasePage : Page
{
public string SomeMethod() { //Magic happens here }
}
並讓您的webforms繼承自代碼隱藏中的BasePage。
另一個經常遵循的方法是創建一個自定義靜態類,其中包含所有靜態方法。 確保你使用ASP.NET特定的東西為它們添加HttpContext.Current前綴。
例如:
public static class HelperClass
{
public static string GetUsernameFromSession()
{
return HttpContext.Current.Session["Username"].ToString();
}
}
您不能從多個類繼承。 但是,您可以將彼此繼承的類串聯起來。
班級員工
班主任:員工
class RegionalDirector:Manager
因此,如果您的程序中有一個完整的命名/員工ID /聯系信息方案,您可以從員工繼承。 然后,詳細說明經理的信息,然后為區域主管提供更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.