C# 액세스 손질

8679 단어 C#액세스 수정자
<1> 수식자 액세스
인터넷: 내부 클래스로 성명되며 현재 프로젝트의 코드만 접근할 수 있습니다. (기본적으로도 인터넷)
public:
공통 클래스, 다른 프로젝트의 코드에 접근할 수 있습니다
보호된: 같은 클래스나 구조 또는 이런 파생 클래스 코드만 접근할 수 있습니다
private: 같은 클래스나 구조의 코드만 이 유형의 구성원에 접근할 수 있습니다
보호된 인터넷: 같은 프로그램에만 집중되거나 다른 프로그램에만 집중된 파생 클래스
세부 사항:
(1) 명명 공간에서 직접 정의할 수 있는 클래스의 접근 수식자는 인터넷만 가능하고,public(2) 구조 구성원(class,struct 포함)은public,private,internal(struct는 계승할 수 없습니다.
보호되지 않음)
(3) 클래스 구성원(class,struct 포함)은public,private,protected,internal,protected internal로 성명할 수 있다.플러그인 클래스와 구조를 포함하여 클래스 구성원입니다. 기본값은private입니다.개인 플러그인 종류
유형
그것의 외곽에 방문할 수 없다.
(4) 계승된 클래스는 기본 클래스보다 높은 접근 등급을 가질 수 없다
(5) 보호된 인터넷에 관해서는 이 특이한 것이 같은 프로젝트에서 (다른 명칭 공간일 수 있음) 이럴 때
보호된 인터넷 장식된 필드로 내부 클래스가 같은 항목의 다른 코드로
방문, 이럴 때 보호의 역할을 잃고 인터넷만 사용됩니다.
다른 프로젝트에서 이럴 때 보호된 인터넷 수식 필드에 접근할 수 없습니다. 보호된 필드와 인터넷이 동시에 작용하는 것 같습니다. 그러나 이 때 원래 프로젝트를 계승하는 클래스를 구성하면 계승합니다.
클래스에서 보호된 인터넷에 접근할 수 있는 것은 보호된 것만 작용하는 것 같습니다.
인스턴스 코드:
두 항목은 각각 consoleApplication2, consoleApplication3
consoleApplication2에는 다음과 같은 파일이 있습니다.
 Class1.cs, Class2.cs,Class3.cs, namespaceTest.cs,Program.cs
//Class1.cs
namespace ConsoleApplication2
{
    class Class1
    {
        private class Test1
        {
            public int a = 1;
        }

        protected class Test2
        {
            public int b = 2;
        }

        public class Test3
        {
            int c = 3;
        }

        protected internal class Test4
        {
            int d = 4;
        }

        internal class Test5
        {
            int e = 5;
        }

        int aa = 1;
        private int bb = 2;
        protected int cc = 3;
        public int dd = 4;
        internal int ee = 5;
        protected internal int ff = 6;
    }
}
//Class2.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication2
{
    internal class Class2
    {
        
        public void print()
        {
            Class1 cs = new Class1();
            //Console.WriteLine("same assemble use Class2 to test Class1's default field :{0}",cs.aa);   //error,default field
            //Console.WriteLine("same assemble use Class2 to test Class1's private field :{0}",cs.bb);   //error,private field
            //Console.WriteLine("same assemble use Class2 to test Class1's protected field :{0}",cs.cc); //error,proteced filed
            Console.WriteLine("same assemble use Class2 to test Class1's public field :{0}",cs.dd);      //OK,   public field
            Console.WriteLine("same assemble use Class2 to test Class1's internal field :{0}", cs.ee);   //OK,   internal field
            Console.WriteLine("same assemble use Class2 to test Class1's protected internal field  :{0}", cs.ff); //OK,   protected internal field
        }

        public void printClass()
        {
            Class1 cs = new Class1();
            //Class1.Test1 t1 = new Class1.Test1();     //error,    private  class
            //Class1.Test2 t2 = new Class1.Test2();     //error,    protected class
            Class1.Test3 t3 = new Class1.Test3();       //OK,       public class
            Class1.Test4 t4 = new Class1.Test4();       //OK,       protected inner class
            Class1.Test5 t5 = new Class1.Test5();       //OK,       inner class
        }
    }
}

//Class3.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication2
{
    public class Class3
    {
        public int x = 11;
        protected int y = 22;
        protected internal int z = 33;

        private class Test1
        {
            public int a = 1;
        }

        protected class Test2
        {
            public int b = 2;
        }

        public class Test3
        {
            int c = 3;
        }

        protected internal class Test4
        {
            int d = 4;
        }

        internal class Test5
        {
            int e = 5;
        }
    }
}
//namespaceTest.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ConsoleApplication2;

namespace namespaceTest
{
    class Test
    {
        public void printClass()
        {
            Console.WriteLine("this is in consoleApplication namespaceTest ");
             Class1 cs = new Class1();
            //Class1.Test1 t1 = new Class1.Test1();     //error,    private  class
            //Class1.Test2 t2 = new Class1.Test2();     //error,    protected class
            Class1.Test3 t3 = new Class1.Test3();       //OK,       public class
            Class1.Test4 t4 = new Class1.Test4();       //OK,       protected inner class
            Class1.Test5 t5 = new Class1.Test5();       //OK,       inner class
        }

        public void print()
        {
            Console.WriteLine("this is in consoleApplication namespaceTest ");
            Class1 cs = new Class1();
            //Console.WriteLine("same assemble use Class2 to test Class1's default field :{0}",cs.aa);   //error,default field
            //Console.WriteLine("same assemble use Class2 to test Class1's private field :{0}",cs.bb);   //error,private field
            //Console.WriteLine("same assemble use Class2 to test Class1's protected field :{0}",cs.cc); //error,proteced filed
            Console.WriteLine("same assemble use Class2 to test Class1's public field :{0}", cs.dd);      //OK,   public field
            Console.WriteLine("same assemble use Class2 to test Class1's internal field :{0}", cs.ee);   //OK,   internal field
            Console.WriteLine("same assemble use Class2 to test Class1's protected internal field  :{0}", cs.ff); //OK,   protected internal field
        }
    }
}

//Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("this is in consoelApplication2");
            Class2 C2 = new Class2();
            C2.print();
            C2.printClass();
            namespaceTest.Test CTest = new namespaceTest.Test();
            CTest.print();
        }
    }
}
ConsoleApplication3의 파일
Class4.cs, Program.cs
//Class4.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ConsoleApplication2;

namespace ConsoleApplication3
{
    //C# has no public,private ,protected to modify class in deriving
    class Class4: Class3
    {
        int xx;
        int yy;
        int zz;

        public void print()
        {
            xx = x;
            yy = y;
            zz = z;
            Console.WriteLine("out class derived from public class public filed is:{0}",xx);
            Console.WriteLine("out class derived from public class protected field is:{0}",yy);
            Console.WriteLine("out class derived from public class protected internal fiels is:{0}",zz);
        }
    };
}

//Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ConsoleApplication2;
namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("This is in consoleApplication3");
            printClass();
            print();
           
            Class4 inTest4 = new Class4();
            inTest4.print();
        }

        static void print()
        {
            Class3 outTst = new Class3();
            Console.WriteLine("outer class use public class to test public filed {0}", outTst.x);
            //Console.WriteLine("outer class use public class to test protected filed {0}",outTst.y);           //error,protected field
            //Console.WriteLine("outer class use public class to test protected internal filed {0}", outTst.z); //error protected internal field
        }
        static void printClass()
        {
            //Class1 outTest1 = new Class1();       //error,    this is inner class
            //Class2 outTest2 = new Class2();       //error,    this is inner clss
            Class3 outTest3 = new Class3();         //OK,       this is public class
        }
    }
}

좋은 웹페이지 즐겨찾기