C#

[C#] 접근 한정자 종류 및 설명, 예제

homoon 2023. 6. 9. 23:21
접근 한정자 설명
public 클래스의 내부/외부 모든 곳에서 접근할 수 있다.
protected 클래스의 외부에서는 접근할 수 없지만, 파생 클래스에서는 접근이 가능함.
private 클래스의 내부에서만 접근할 수 있다.
파생 클래스에서도 접근이 불가능함.
internal 같은 어셈블리에 있는 코드에서만 public 으로 접근할 수 있다.
다른 어셈블리에 있는 코드에서는 private와 같은 수준의 접근성을 가짐.
protected internal 같은 어셈블리에 있는 코드에서만 protected로 접근할 수 있다.
다른 어셈블리에 있는 코드에서는 private와 같은 수준의 접근성을 가짐.
private protected 같은 어셈블리에 있는 클래스에서 상속받은 클래스 내부에서만 접근이 가능.
sealed 상속을 막는 한정자
해당 한정자를 수식하는 클래스를 상속받으려고 시도하면 컴파일 에러 출력
접근 한정자로 수식하지 않으면 private와 같은 공개 수준을 가짐
/*
실행
Turn on water : 20
Turn on water : -2
Out of temperature range
 */
namespace AccessModifier
{
    class WaterHeater
    {
        protected int temperature;

        public void SetTemperature(int temperature)
        {
            if (temperature < -5 || temperature > 42)
            {
                throw new Exception("Out of temperature range");
            }

            this.temperature = temperature;
        }

        internal void TurnOnWater()
        {
            Console.WriteLine($"Turn on water : {temperature}");
        }
    }

    internal class Program
    {
        static void Main(string[] args)
        {
            try
            {
                WaterHeater heater = new WaterHeater();
                heater.SetTemperature(20);
                heater.TurnOnWater();

                heater.SetTemperature(-2);
                heater.TurnOnWater();

                // 예외가 발생하여, catch 블록으로 실행 위치가 이동됨
                heater.SetTemperature(50);
                heater.TurnOnWater();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }
}