C# 사용자 정의 형변환

Featured image

Git Source


사용자 정의 형변환 🎈

implicit, explicit 두 가지 모두 C# 4.0 부터 제공하는 연산자이다.


implicit : 별도의 캐스팅 없이 컴파일러가 알아서 변환하는 것, 반환에 의한 값 손실이 없을 때 사용한다.

class Time
{
    public int Hour { get; set; }

    public int Minute { get; set; }

    public int Second { get; set; }

    public static implicit operator int(Time time) => time.Hour * 3600 + time.Minute * 60 + time.Second;
}
static void Main(string[] args)
{
    var time = new Time()
    {
        Hour = 5,
        Minute = 30,
        Second = 15,
    };

    int totalSec = time;

    Console.WriteLine($"Sec : {totalSec}");
}

explicit : 값 손실이 발생할 수 있어, 캐스팅에 의해서만 반환이 가능하다.

class Meter
{
    public float M { get; set; }

    public Meter(float m) => M = m;

    public static implicit operator string(Meter m) => $"{m.M}m";

    public static explicit operator Centimeter(Meter m) => new Centimeter(m.M * 100);
}

class Centimeter
{
    public float Cm { get; set; }

    public Centimeter(float cm) => Cm = cm;

    public static implicit operator string(Centimeter c) => $"{c.Cm}cm";

    public static explicit operator Meter(Centimeter c) => new Meter(c.Cm / 100);
}
static void Main(string[] args)
{
    var meter = new Meter(5.5f);

    Console.WriteLine(meter);

    var centimeter = (Centimeter)meter;

    Console.WriteLine(centimeter);  
}

result