C#巢狀型別

來源:互聯網
上載者:User

標籤:

1.什麼是巢狀型別:在類和結構內部定義的類型稱為巢狀型別,例如

1 class Container2 {3     class Nested4     {5         Nested() { }6     }7 }

2.不管外部類型是結構還是類。巢狀型別修飾符預設為private,可以設定為其他的修飾符,巢狀型別對外部類型是不可訪問的 ,可以設定為public。

class Container{     public class Nested    {        Nested() { }    }}

 3.巢狀型別(或內部類型)可訪問包含類型(或外部類型)。若要訪問包含類型,請將其作為建構函式傳遞給巢狀型別,不受外部類的修飾符限制例如:

 public class A        {            private int _a;                       /*嵌套類 定義*/            private class NestedA            {                public NestedA(A a)                {                    a._a = 9;                }                          }        }
View Code

 


public class Container{public class Nested{private  Container  m_parent;public Nested(){}public Nested(Container parent){m_parent=parent;}}}
View Code

public class A    {        private static int _AInt;        private int _instanceInt;        private static void AMethod()        {            Console.WriteLine(_AInt);        }        public void SayIt()        {            NestedA.Method(this);        }        /*嵌套類 定義*/        private class NestedA        {            public static void Method(A a)            {                //靜態成員                _AInt = 100;                AMethod();                //執行個體成員                a._instanceInt = 10;                a.SayIt();            }        }    }
View Code
但是外部類只能夠存取修飾詞為public、internal嵌套類的欄位、方法、屬性。樣本如下:
public class A    {        public static void AMethod()        {            //成功            NestedA.StaticMethod();            //編譯報錯            NestedA._Int = 100;                        NestedA ins=new NestedA();            //成功            ins.Method();            //編譯報錯            ins._instanceInt = 100;        }        /*嵌套類 定義*/        private class NestedA        {            private static int _Int;            private int _instanceInt;            public static void StaticMethod() { }            public void Method(){}        }    }
View Code

 繼承:

   繼承類,也就是繼承類外部類的類,只能使用父類中嵌套類的public或者internal(同一個程式集合)方法。但是繼承類可以再定義一個內嵌類並從繼承父類中嵌套類。如:

public class A{            /*嵌套類 定義*/            protected class Nested            {                protected virtual void BaseNested_Method(){}            }} public class C : A{      /*內嵌類 定義*/      protected class C_Nested:Nested      {                protected override void BaseNested_Method()                {                    //重寫部分        }       } }
View Code

   因為C中A中繼承,因此C_Nested可以繼承Nested類,從而擷取重寫父嵌套類的機會。但是Nested必須是可繼承類及可訪問的(非private 、sealed、static)。

         嵌套類可以隨意外部類的任何資料屬性,而外部類訪問嵌套類就只能遵守存取修飾詞。從這個角度看,嵌套類是外部類的補充,通過嵌套類可以擷取更好的封裝性,增加外部類的可維護性和可讀性。    

 

 

巢狀型別可訪問包含類型的私人成員和受保護的成員(包括所有繼承的私人成員或受保護的成員)。

在前面的聲明中,類 Nested 的完整名稱為 Container.Nested。這是用來建立嵌套類的新執行個體的名稱,如下所示:

Container.Nested nest = new Container.Nested();

C#巢狀型別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.