implicit, explicit 키워드는 암시적( implicit ) 또는 명시적( explicit ) 변환을 정의할 때 사용된다. 암시적 변환은 특별한 구문을 호출할 필요가 없으며 할당 및 메서드 호출과 같은 다양한 상황에서 사용할 수 있다. 미리 정의된 암시적 변환은 항상 성공하도록 구현되어 예외를 던지지 않으며 사용자가 정의하는 암시적 변화도 동일하게 작동해야 한다. 만약 변환할 때 예외를 던지거나 정보가 손실될 수 있는 경우에는 명시적 변환으로 정의해야 한다. (위와 같이 가이드한 것은 암시적 변환을 사용했을 때 문제가 발생하면 디버깅하는 것이 어려워지기 때문으로 생각된다.) 사용자가 정의한 명시적 및 암시적 변환은 is나 as 연산자는 사용하지 못하고 캐스팅하여 호출해야 한다. 사용 방법은 o..
인덱서란 클래스나 구조체의 인스턴스를 배열처럼 사용할 수 있는 방법을 말한다. 인덱싱된 값은 다양한 형태의 매개 변수를 사용하여 반환하거나 할당할 수 있다. 이러한 인덱서는 매개 변수를 사용한다는 점을 제외하면 Property와 유사한데 컴파일러가 항상 인덱서에 올바른 스토리지를 생성할 수 있는 것은 아니라 Property와 다르게 자동 구현 속성을 사용할 수 없다. 인덱서는 정수 값으로 인덱싱할 필요가 없고, 별도의 인덱싱된 값을 찾는 메커니즘을 정의하여 사용해도 무방하다. 인덱서는 오버로드될 수 있도 있고 2차원 배열에 액세스하는 경우 둘 이상의 매개 변수를 사용할 수 있다. 인덱서를 정의할 때 사용되는 키워드에 대한 내용은 아래와 같다. this : 인덱서 임을 정의 get : 값을 반환할 때 필요..
Null 허용 값 형식('T?') Null 허용 값 형식이란 null을 가질 수 있는 값 형식의 변수를 뜻한다.(참조 형식 변수에 사용할 수는 있는데 경고가 뜬다.) null을 할당할 수 있다는 것을 암시적으로 나타내기 때문에 변수에 null을 할당할 수 있다. 변수를 선언하는 것은 아래와 같다. bool? b; Nullable b2; 두 가지 모두 컴파일하면 Nullable 형식이 된다. 변수에 값을 할당하는 방법은 아래와 같다. bool b = true; bool? b1 = true; bool? b2 = b; bool? b3 = null; Nullable nb = null; 아래의 경우는 InvalidOperationException을 던진다. int? n = null; int m = n; // 에러..
오버라이드(Override)란 부모클래스를 상속받은 자식클래스가 부모클래스에 존재하는 메서드를 다시 정의하는 것을 뜻한다. 메서드를 다시 정의하는 것이기 때문에 메서드의 구조는 같아야한다. class BaseClass { public void Method() { } } class DerivedClass : BaseClass { public void Method() { } } 오버라이드하고 있는 위 코드는 재정의하고 있는 DerivedClass.Method에 경고가 발생한다. 위와 같은 경고가 발생하지 않도록 수정한느 방법은 두 가지가 있다. 하나는 override 키워드를 사용하는 방법이 있고 (override 키워드를 사용하기 위해서는 부모클래스의 메서드에 virtual나 abstract 키워드를 사용..