액세스 한정자는 클래스 구성원의 액세스 가능성 범위 또는 클래스 자체 유형을 지정하는 데 사용됩니다. 액세스 수정자에는 6가지 유형이 있습니다.
-
공개
-
비공개
-
보호됨
-
내부
-
내부 보호
-
비공개
공개 액세스 수정자
공개 액세스 수정자를 구현하는 개체는 제한 없이 프로젝트의 모든 위치에서 액세스할 수 있습니다.
예시
using System; namespace MyApplication{ public class Program{ public static void Main(){ Person person = new Person(); Console.WriteLine(person.Name); //Person Name is accessible as it is public } } public class Person{ public string Name = "Mark"; } }
비공개 액세스 수정자
private access modifier를 구현하는 개체는 클래스나 구조체 내부에서만 액세스할 수 있습니다. 결과적으로 생성된 클래스 외부에서 액세스할 수 없습니다.
예시
using System; namespace MyApplication{ public class Program{ public static void Main(){ Person person = new Person(); Console.WriteLine(person.Name); //Since Name is private it is not accessible in Program class. // Error: Person.Name is inaccessible due to its protection level. } } public class Person{ private string Name = "Mark"; } }
보호된 액세스 수정자
protected 키워드는 클래스 내부와 해당 클래스에서 파생된 모든 클래스에서 개체에 액세스할 수 있음을 의미합니다.
예시
using System; namespace MyApplication{ public class Program{ public static void Main(){ Employee employee = new Employee(); employee.Print(); //Output: Mark Person person = new Person(); Console.WriteLine(person.Name); // Error: Person.Name is inaccessible due to its protection level. } } public class Person{ protected string Name = "Mark"; } public class Employee : Person{ public void Print(){ Console.WriteLine(Name); } } }
내부 액세스 수정자
Internal 키워드의 경우 현재 프로젝트 어셈블리 내에 정의된 클래스에만 액세스가 제한됩니다.
예시
프로젝트 1 -
using System; namespace MyApplication{ public class Program{ public static void Main(){ Person person = new Person(); Console.WriteLine(person.Name); //Output: Mark } } public class Person{ internal string Name = "Mark"; } }
출력
Mark
프로젝트 2 -
using MyApplication; using System; namespace Project2{ public class Project2Class{ public void Print(){ Person person = new Person(); Console.WriteLine(person.Name); // Error: Person.Name is inaccessible due to its protection level. } } }
보호된 내부 액세스 수정자 -
보호된 내부 액세스 수정자는 보호와 내부의 조합입니다. 결과적으로 동일한 어셈블리 또는 다른 어셈블리의 파생 클래스에서만 보호된 내부 멤버에 액세스할 수 있습니다.
예시
프로젝트 1 -
using System; namespace MyApplication{ public class Program{ public static void Main(){ Person person = new Person(); Console.WriteLine(person.Name); //Output: Mark } } public class Person{ protected internal string Name = "Mark"; } }
출력
Mark
프로젝트 2 -
using MyApplication; using System; namespace Project2{ public class Project2Class : Person{ public void Print(){ Console.WriteLine(Name); //Output: Mark } } }
개인 보호 액세스 수정자
private protected 액세스 수정자는 private 및 protected 키워드의 조합입니다. 포함 클래스 내부 또는 포함 클래스에서 파생된 클래스의 멤버에 액세스할 수 있지만 동일한 어셈블리(프로젝트)에서만 가능합니다. 따라서 다른 어셈블리에서 액세스하려고 하면 오류가 발생합니다. 이 수정자는 C# 버전 7.2 이상에서 유효합니다.