클라이언트 프로그래머의 일기/신입 클라이언트 프로그래머의 일기

C# 변환 키워드 implicit, explicit, operator

ckhyeok 2020. 10. 12. 10:52

기본적 캐스팅 
ex) float b = 50.f;
    int a = b;
이러면 에러가 난다. 암시적 변환 불가능하기 때문.
but) int a = (int) b로 캐스팅 해준다면 문제가 없게 돌아간다.

이렇게 캐스팅 없이 하는 암시적 변환과, 사용자가 임의로 지정해주는 명시적 변환을 이용한 연산자 설정을 하자.

별도의 캐스팅 없이 변환 되는 암시적 변환 키워드 implicit
사용자가 임의 지정해서 캐스팅 필요한 경우 explicit

ex) 시간을 입력하는 Time Class 생성

class time
{
public int hour, min, sec;
public time(){}
public time(int h, int m, int s)
{
hour = h;
min = m;
sec = s;
}

public void outTime()
{
Console.WriteLine("{0}시 {1}분 {2}초 입니다.", hour, min, sec);
}

public static implicit operator int(time n)
{
return m.hour * 3600 + m.min * 60 + m.sec;
}
위 메소드의 뜻은 time형을 int로 변환하는것.

즉 Main에서 time tt = new time(23, 23, 1);
int a = tt;

Console.WriteLine(a); 를 실행한다면 Return 되는 부분에서 연산된 값이 나온다.

여기서 implicit이랑 explicit의 차이점은 명시적, 암시적이란 것이다.

쉽게 얘기하면 implicit은 int a = tt;가 바로 가능하며, explicit은 tt = (time)232232; 이런식으로 (time)캐스팅을 해줘야 한다는 것이다.