2 min to read
C# 사용자 정의 형변환
사용자 정의 형변환 🎈
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}");
}
- int totalSec = time 과 같이 별도의 캐스팅 없이도 대입이 가능하다.
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);
}
- var centimeter = (Centimeter)meter와 같이 클래스가 다르더라도 explicit을 이용하면 클래스 간 캐스팅이 가능하다.