簡體   English   中英

C#子類或接口?

[英]C# subclass or interface?

C#的新手-指示我創建一個子類來對基類進行變體。 以前從未做過子類,所以我讀了一些然后嘗試了一下。 從基類繼承后,只能從子類訪問MyClass的私有屬性。 我在這里做了什么? 這是一個真正的子類,還是某種嵌套的繼承類?

    public class MyClass
{
     private string connString;
     // exec stored procedure 1

     public class MySubClass : MyClass
     {
            otherClass o = new otherClass(connString);
            // exec stored procedure 2
     }
}

無論我做什么,它似乎都有效。 另外,在子類的主題上,是否有一種通用的命名方式? 例如MyClass_SubClass或_MyClass等?

非常感謝!

編輯:再次謝謝大家! 我想我在這里尋找這個答案。 無論如何,我意識到我會誤解任務-根本不需要嵌套或繼承! 剛剛創建了一個單獨的類似類。

您已經嵌套了類,這可能是您應該避免的事情,直到您對C#和OOP有了更好的了解(然后再繼承,這很奇怪)。

子類化或派生是通過繼承完成的。 在您的示例中:

public class MyClass
{
     private string connString;
     // exec stored procedure 1
}

public class MySubClass : MyClass
{
      otherClass o = new otherClass(connString);
      // exec stored procedure 2
}

要允許MySubClass訪問MyClass成員,需要將該成員標記為protected或更高。 private成員不能在包含類之外訪問。

public class MyClass
{
     protected string connString;
     // exec stored procedure 1
}

MySubClass實際上是MyClass.MySubClass。 通常,普通子類無法訪問私有成員。

普通子類將作為獨立類在單獨的文件中。 如果應該允許子類訪問基類成員,則應將其聲明為“受保護”而不是“私有”。

命名的主題之一,通常名稱代表類型,而與基類無關。 例如,如果您有動物的基類,則有一個名為“狗和貓”的子類是合理的。 或在Windows中,可能有一個稱為Control的基類和一個名為Button,TextBox,Label等的子類。

您的代碼是有效的,它並沒有完全實現您所指示的實現。 您可以在一個類中聲明一個類。 使用您的代碼,您可以實例化這兩個類,如下所示。

class Program
{
    static void Main(string[] args)
    {
        MyClass myClass = new MyClass();
        MyClass.MySubClass mySubClass = new MyClass.MySubClass();
    }
}

這是非常不尋常的,在一個類中聲明一個類並不少見,但是通常您不會將MySubClass聲明為公共,而是將其聲明為私有或受保護。 像這樣...

public class MyClass
{
    private string connString;
    private MyClassHelper mySubClass = new MyClassHelper();

    // exec stored procedure 1

    protected class MyClassHelper
    {
        object o = new object();
        // exec stored procedure 2
    }
}

...因此MyClassHelper僅存在於MyClass范圍內。 我從未見過這樣的代碼:內部類繼承了外部類,它可以完美地編譯,您永遠也不會做,可以輕松地創建循環引用。

BradleyDotNET的答案告訴您如何實現MyClass的子類。 這也稱為繼承。有關更多信息,請參見此處。http://msdn.microsoft.com/zh-cn/library/ms173149(v=vs.80).aspx

提醒一下,我對類繼承不會太瘋狂,類之間存在許多類型的關系,相比之下, 類繼承是相當嚴格的

您的問題的標題是子類或接口。 接口是您應該查看和理解的東西,它們對於實現SOLID代碼非常重要。 在我的代碼中,類繼承接口的方式比它們繼承類的要普遍得多。

暫無
暫無

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

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