implicit 키워드를 통해 int i = 30; 과 같은 형태를 만들 수 있습니다
(그렇지만 잘 안쓰입니다 일반적인 new Class 형태를 많이 사용하기 때문에..)
implicit
implicit
키워드는 암시적 사용자 정의 형식 변환 연산자를 선언하는 데 사용됩니다. 변환 시 데이터가 손실되지 않는 경우 이 키워드를 통해 사용자 정의 형식과 다른 형식 간에 암시적 변환을 사용할 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | using System; using System.Collections.Generic; using System.Text; namespace TestProject { public class Hello { public int ddd = 30; public double val; public Hello(double d) { val = d; } public Hello(int data = 0) { ddd = data; } //오버로딩이 가능하다 public static implicit operator Hello(int data) { return new Hello(data); } // User-defined conversion from Digit to double public static implicit operator double(Hello d) { return d.val; } // User-defined conversion from double to Digit public static implicit operator Hello(double d) { return new Hello(d); } } class test { static void Main(string[] args) { //이처럼 바로 대입이 가능 => //public static implicit operator Hello(int data) 가 호출됨 Hello ins = 130; Hello dig = new Hello(7.0); //This call invokes the implicit "double" operator double num = dig; //This call invokes the implicit "Digit" operator Hello dig2 = 12.0; Console.WriteLine("num = {0} dig2 = {1} , {2}", num, dig2.val, ins.ddd); Console.ReadLine(); } } } | cs |
결과
num = 7 dig2 = 12 , 130
암시적 변환은 불필요한 캐스트를 제거하여 소스 코드 가독성을 향상할 수 있습니다.
그러나 암시적 변환 시 프로그래머가 명시적으로 형식 간에 캐스팅할 필요가 없으므로 예기치 않은
결과를 방지하기 위해 주의해야 합니다.
일반적으로 암시적 변환 연산자는 예외를 throw하지 않고 정보가 손실되지 않으므로
프로그래머에게 알리지 않고 안전하게 사용할 수 있습니다.
변환 연산자가 이러한 조건에 맞지 않는 경우 explicit
로 표시되어야 합니다.
자세한 내용은 변환 연산자 사용을 참조하세요.
ref : https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/implicit
반응형
'프로그래밍(Programming) > C#' 카테고리의 다른 글
추상 속성 정의 (0) | 2018.09.02 |
---|---|
추상 및 봉인 클래스와 클래스 멤버 (0) | 2018.09.02 |
클래스/구조체 Object 클래스 상속과 ToString 메서드 재정의 (0) | 2018.08.30 |
new 와 override 차이 (0) | 2018.08.30 |
Hashtable 클래스 (0) | 2018.08.29 |