English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
C#4.0(.NET 4.5C#에서는 dynamic으로 새로운 타입을 도입했습니다. 이는 컴파일 시점의 타입 검사를 피합니다. dynamic 타입은 컴파일 시점에 타입 검사를 건너뜁니다; 대신, 실행 시점에 타입을 해석합니다.
동적 타입 변수는 키워드 dynamic으로 정의됩니다.
dynamic MyDynamicVar = 1;
대부분의 경우 컴파일러는 동적 타입을 객체 타입으로 컴파일합니다. 그러나 동적 타입 변수의 실제 타입은 실행 시점에 해석됩니다.
dynamic MyDynamicVar = 1; Console.WriteLine(MyDynamicVar.GetType());
System.Int32
동적 타입은 할당된 값에 따라 실행 시점에 타입이 변경됩니다. 다음 예제는 동적 변수가 할당된 값에 따라 타입이 변경되는 방법을 보여줍니다.
static void Main(string[] args) { dynamic MyDynamicVar = 100; Console.WriteLine("Value: {0}, Type: {1};, MyDynamicVar, MyDynamicVar.GetType()); MyDynamicVar = "Hello World!!"; Console.WriteLine("Value: {0}, Type: {1};, MyDynamicVar, MyDynamicVar.GetType()); MyDynamicVar = true; Console.WriteLine("Value: {0}, Type: {1};, MyDynamicVar, MyDynamicVar.GetType()); MyDynamicVar = DateTime.Now; Console.WriteLine("Value: {0}, Type: {1};, MyDynamicVar, MyDynamicVar.GetType()); }
값:100, 타입: System.Int32 값: Hello World !!, 타입: System.String 값: True, 타입: System.Boolean 값: 01-01-2014타입: System.DateTime
동적 타입 변수는 기타 타입으로 자동 변환됩니다.
dynamic d1 = 100; int i = d1; d1 = "Hello"; string greet = d1; d1 = DateTime.Now; DateTime dt = d1;
동적으로 클래스 객체를 할당하면 컴파일러는 사용자 정의 클래스 객체의 동적인 타입의 올바른 메서드와 속성 이름을 확인하지 않습니다. 아래 예제를 참고하세요.
class Program { static void Main(string[] args) { dynamic stud = new Student(); stud.DisplayStudentInfo(1, "Bill");// 실행 중 오류, 컴파일 중 오류가 없습니다 stud.DisplayStudentInfo("1");// 실행 중 오류, 컴파일 중 오류가 없습니다 stud.FakeMethod();// 실행 중 오류, 컴파일 중 오류가 없습니다 } } public class Student { public void DisplayStudentInfo(int id) { } }
위 예제에서, C# 컴파일러는 매개변수, 매개변수 타입을 확인하지 않습니다. 그것은 실행 시에 이를 확인하고, 잘못된 경우 실행 시 예외를 발생시킵니다. 동적 타입은 Visual Studio IntelliSense를 지원하지 않습니다. 동적 타입은 Visual Studio IntelliSense를 지원하지 않습니다.
동적 언어 실행 시간(DLR) API는 C# 동적 타입의 기본 구조를 지원합니다。