C#의 CharEnumerator.GetType() 메서드는 현재 인스턴스의 정확한 런타임 타입(Type)을 반환하는 데 사용됩니다. 이 메서드는 모든 .NET 객체가 상속받는 Object 클래스에서 파생된 것으로, 문자열을 문자 단위로 순회할 때 사용되는 CharEnumerator 객체의 실제 타입 정보를 확인할 수 있습니다.
문법(Syntax)
public Type GetType();
이 메서드는 매개변수를 받지 않으며, 현재 인스턴스의 런타임 타입을 나타내는 Type 객체를 반환합니다.
예제 코드
다음 예제를 통해 CharEnumerator.GetType() 메서드의 실제 동작 방식을 살펴보겠습니다.
using System;
public class Demo {
public static void Main(){
string strNum = "john";
CharEnumerator ch = strNum.GetEnumerator();
Console.WriteLine("HashCode = "+ch.GetHashCode());
Console.WriteLine("Get the Type = "+ch.GetType());
while (ch.MoveNext())
Console.Write(ch.Current + " ");
// 객체 해제(Dispose)
ch.Dispose();
// 위에서 객체를 해제했기 때문에 아래 코드는 오류를 발생시킵니다.
// Console.WriteLine(ch.Current);
}
}실행 결과
위 코드를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.
HashCode = 1373506 Get the Type = System.CharEnumerator j o h n
코드 설명
위 예제의 핵심 흐름은 다음과 같습니다.
1. 열거자 생성: strNum.GetEnumerator()를 호출하여 문자열 "john"에 대한 CharEnumerator 객체를 생성합니다.
2. 해시 코드 확인: GetHashCode() 메서드를 통해 해당 인스턴스의 해시 코드를 출력합니다.
3. 타입 확인: GetType() 메서드가 반환한 값이 System.CharEnumerator임을 확인할 수 있습니다. 이것이 바로 현재 인스턴스의 실제 런타임 타입입니다.
4. 문자 순회: MoveNext()와 Current 속성을 조합하여 문자열의 각 문자를 하나씩 출력합니다.
5. 리소스 해제: Dispose()를 호출하여 객체를 명시적으로 해제합니다. 해제된 이후에는 Current 속성에 접근할 수 없으므로, 주석 처리된 코드처럼 접근 시 오류가 발생합니다.
주요 특징 정리
- GetType()은 매개변수 없이 호출되며, 런타임 타입 정보를 담은 Type 객체를 반환합니다.
- 반환값을 통해 다형성(polymorphism) 상황에서도 객체의 실제 타입을 정확히 파악할 수 있습니다.
- CharEnumerator는 IDisposable을 구현하므로, 사용 후 Dispose()로 리소스를 해제하는 것이 좋습니다.
- Dispose() 호출 후에는 Current, MoveNext() 등 멤버에 접근하면 InvalidOperationException이 발생합니다.