1. 程式人生 > >C#嵌套類

C#嵌套類

名稱 containe span void container sharp 規則 ati 靜態成員

嵌套類顧名思義就是類或者結構中定義的類

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


<1>嵌套類的默認訪問權限是private ,可以指定為public,protected,private,internal,protected internal。
<2>嵌套類型可以訪問外部類(包裹嵌套類的類),如果要訪問外部類型,要把外部類通過構造函數傳進一個實例
<3>嵌套類中只能訪問外部類中的靜態成員,不能直接訪問外部類的非靜態成員。

namespace ConsoleApplication11Anonymous
{
    
class Class1 { private int x; protected string str; static int y; public class Nested { int xx; string ss; void print() { //int y = x; //error,不能訪問外部的非靜態成員 int z = y; //OK ,可以訪問外部的靜態成員
} public Nested(Class1 A) { xx = A.x; //通過外部類的實例來訪問外部類私有成員 ss = A.str; //通過外部類的實例來訪問外部類保護成員 } } } class Program { static void Main(string[] args) { Class1 X
= new Class1(); Class1.Nested CN = new Class1.Nested( X ); } } }

<4>根據C#作用域的規則,外部類只能通過內部類的實例來訪問內部類的public成員,不能訪問protected,private。

class Class2
    {
        private int x;
        static private int y;

        public void func()
        {
            //x = xx;   //當前上下文中不存在名稱“xx”
            //x = zz;   //當前上下文中不存在名稱“zz”
            //x = aa;   //當前上下文中不存在名稱“aa”
            x = Nested.aa;
            Console.WriteLine(x);
        }

        public void funcs()
        {
            //這個只能訪問Nested類的public成員
            Nested XX = new Nested();
            x = XX.zz;
            Console.WriteLine(x);
            //x = XX.aa;//訪問靜態成員只能通過類名而不是實例
            x = Nested.aa;
            Console.WriteLine(x);
        }

        private class Nested
        {
            private int xx;
            protected int yy;
            public int zz;
            public static int aa;
            
        }
    }

C#嵌套類