액세스 한정자는 클래스 구성원의 액세스 가능성 범위 또는 클래스 자체 유형을 지정하는 데 사용됩니다. 액세스 수정자에는 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 이상에서 유효합니다.