c#의 접근 제한자 (엑세스 한정자)는 크게 4가지로 이루어져 있다.

 

public : 어디서든 접근 가능
private : 해당 클래스 내부에서만 접근 가능
internal : 같은 어셈블리 내에서만 접근 가능
protected : 파생 클래스 상속받은 클래스에서 접근 가능

 

많이 사용하는건 publicprivate이다.

 

class의 접근 제한자 기본값은 internal이며 
class내의 필드나 메서드의 접근 제한자 기본값은 private이다.

 

access_modifier 네임스페이스

using access_modifier2;
using System;

namespace access_modifier
{
    // 기본값은 internal 따라서 같은 어셈블리 (프로젝트)에서는 사용이 가능하다.
    class Sample
    {
        // 기본값은 private

        int a;
        public int b;
        protected int c;

        public void Print()
        {
            Console.WriteLine("Hello");
        }

        // 메서드 역시 기본값은 private

        void Print2()
        {
            Console.WriteLine("Hello2");
        }
    }

    // Sample2 클래스는 Sample 클래스를 상속받음
    class Sample2 : Sample
    {
        int d;

        void Print3()
        {
            // 따라서 protecd 접근 가능
            Console.WriteLine("Hello3" + c);
        }
    }


    class Program
    {
        static void Main(string[] args)
        {
            // class는 internal이기 때문에 인스턴스화 가능
            Sample sample = new Sample();

            // private 접근 불가
            sample.a = 1;

            // public 접근 가능
            sample.b = 2;

            // proteced 접근 불가
            sample.c = 3;

            sample.Print();

            // private 접근 불가
            sample.Print2();

            // 하지만 다른 어셈블리이기 때문에 사용이 불가능하다.
            internal_test it = new internal_test();

            // public class는 접근이 가능 하지만 사용하기 위해서는
            // using문을 추가 해주어야 한다.
            public_test pt = new public_test();
        }
    }
}

 

access_modifier2 네임스페이스 (다른 어셈블리)

namespace access_modifier2
{
    internal class internal_test
    {
        int a;
        int b;
        int c;
    }
    
    public class public_test
    {
        int a;
        int b;
        int c;
    }    
}

'C# > Basic' 카테고리의 다른 글

제네릭 (Generic) 1  (0) 2021.02.28
상속 (inheritance)  (0) 2021.02.25
this  (0) 2021.02.13
getters & setters  (0) 2021.02.07
구조체 (struct)  (0) 2021.02.06