c# dynamic 예제

다른 언어로 조작성을 달성하고 작성자는 동적 라이브러리 DLR을 구현할 수 있도록 IDynamicMetaObjectProvider, DynamicMetaObject, DynamicObject 및 ExpandoObject와 같은 클래스 및 인터페이스 집합을 제공합니다. 동적 JSON에 들어가는 것을 정밀하게 제어하고 싶다고 가정해 보라고 가정해 보시면 됩니다. DynamicObject를 사용하면 미리 속성을 알 수 없지만 형식을 제어할 수 있습니다. 동적 프로그래밍을 통해 런타임 오류에 노출될 수 있습니다. 실행 중에 변이할 수 있는 동적 변수를 선언하는 것은 무서운 것입니다. 개발자가 데이터에 대해 잘못된 가정을 할 때 코드 품질이 저하됩니다. 다시 한번, 작은 면책 조항. 이 예제는 데모용으로만 사용됩니다. 일반적으로 동적 및 반사는 “우리가 할 수 있기 때문에”뿐만 아니라 아껴서 사용해야합니다. 다음은 int로 인스턴스화되는 두 개의 동적 변수와 복잡한 유형(Book)인 다른 변수의 예입니다.

그러나 동적 기능의 이점을 얻을 수 있는 많은 시나리오에서 IntelliSense는 코드가 문자열 리터럴을 사용했기 때문에 어쨌든 사용할 수 없었습니다. 이 문제는 이 문서의 후반부에서 자세히 설명합니다. 일반적으로 동적 언어는 컴파일 타임 형식 검사를 수행하고 런타임에만 개체 유형을 식별하지 않습니다. 이 방법은 장단점이 있습니다: 종종 코드가 훨씬 빠르고 쉽게 작성할 수 있지만 컴파일러 오류가 발생하지 않고 응용 프로그램의 올바른 동작을 보장하기 위해 단위 테스트 및 기타 기술을 사용해야 합니다. 지금은 동적 형식이 몇 가지 예제에서 어떻게 작동하는지 살펴보겠습니다. C# 제네릭 강한 형식 _typedProperty 멤버 형식을 구동 하는 일반적인 방법으로 속성입니다. 즉, 속성 형식은 T 제네릭 형식에서 온다. 동적 JSON 멤버는 사전 내에 있으며 제네릭 형식만 저장합니다. 이 동적 형식을 사용하면 동일한 형식의 멤버 집합을 균일하게 설정할 수 있습니다. 동적 멤버 집합을 허용하지만 동작을 강력하게 입력할 수 있습니다. 임의JSON의 긴 형식에만 관심이 있다고 가정해 보겠습니다: Anders Hejlsberg는 PDC08에서 다음과 같은 훌륭한 예를 제시했습니다: 동적 형식을 동적 키워드를 사용하여 정의할 수 있습니다. 동적 및 리플렉션 모두 응용 프로그램의 성능을 크게 저하시킬 수 있으며 정적 메커니즘과 추상화를 올바르게 구현하여 피할 수 있는 버그를 도입할 수 있습니다.

많은 COM 메서드를 사용 하 여 형식 개체로 형식을 지정 하 여 인수 형식 및 반환 형식의 변형을 허용 합니다. 따라서 C#에서 강력하게 입력된 변수와 조정하기 위해 값을 명시적으로 캐스팅해야 했습니다. /link (C# 컴파일러 옵션) 옵션을 사용 하 여 컴파일 하는 경우 동적 형식을 도입 하면 COM 시그니처에서 개체의 발생을 동적 형식처럼 처리 하 고 따라서 캐스팅의 대부분을 방지 할 수 있습니다. 예를 들어 다음 문은 Microsoft Office Excel 스프레드시트의 셀에 액세스하는 방법을 동적 형식과 동적 형식 없이 대조합니다. 원래 C#은 순수한 정적 언어로 만들어졌지만 C# 4를 사용하면 동적 언어 및 프레임워크와의 상호 운용성을 향상시키기 위해 동적 요소가 추가되었습니다. C# 팀은 몇 가지 디자인 옵션을 고려했지만 마침내 이러한 기능을 지원하는 새 키워드인 동적 키워드를 추가하기로 했습니다. 또한, 이것은 동적 기능이 우리를 위해 할 수있는 모든 것을 언급 할 가치가있다. ExpandoObject 및 DynamicObject와 같은 더 유용한 구문이 있으며 향후 기사에서 다룰 것입니다. 실제 유형의 동적은 런타임에 해결됩니다. 다음과 같이 동적 변수의 형식을 확인할 수 있습니다.

위의 문은 다음과 같이 컴파일됩니다: C# 4에는 Office 자동화 API와 같은 COM API와의 상호 운용 환경을 개선하는 몇 가지 기능이 포함되어 있습니다. 향상된 작업 중에는 동적 형식과 명명된 인수 및 선택적 인수의 사용이 있습니다. 이 문서에서는 C# 4의 새로운 동적 기능에 대한 일반적인 개요를 제공하고 리플렉션 또는 암시적으로 입력된 변수와 같은 다른 언어 및 프레임워크 기능에서 작동하는 방법에 대한 보다 심층적인 정보를 자세히 설명합니다.