이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 21258|회답: 0

[출처] C#에서 다이내믹을 올바르게 사용하는 방법

[링크 복사]
게시됨 2016. 7. 7. 오전 10:15:06 | | |
dynamic은 FrameWork 4.0의 새로운 기능입니다. 동적 언어의 등장은 C#에 약한 언어 유형의 특성을 부여했습니다. 컴파일러는 더 이상 컴파일 시점에 타입을 검사하지 않으며, 동적 객체는 컴파일 시 기본적으로 원하는 기능을 지원합니다. 예를 들어, GetDynamicObject 메서드가 반환하는 객체에 대해 아무것도 모른다 해도, 이런 코드 호출을 하면 컴파일러가 오류를 보고하지 않습니다:




올바른 사용법에 관해서라면, 먼저 한 가지 잘못된 사용법을 지적해야 합니다:

사람들은 종종 dynamic과 비교할 때 var라는 키워드를 사용합니다. 사실 var와 dynamic은 완전히 두 개념이며 전혀 비교해서는 안 됩니다. 컴파일이 완료되면 컴파일 시간은 var 변수의 실제 타입과 자동으로 일치하고, 변수의 선언을 실제 타입으로 대체하여 인코딩할 때 실제 타입을 선언하는 것처럼 보입니다. 동적 컴파일 후에는 실제로 객체 타입이 되지만, 컴파일러는 동적 타입에 대해 특별한 처리를 하여 컴파일 중에는 타입 검사를 수행하지 않고 런타임에 타입 검사를 넣습니다.

이는 Visual Studio의 편집기 창에서 확인할 수 있습니다. var로 선언된 변수는 Visual Studio가 var 타입의 실제 타입을 추론할 수 있어 "지능형 센스"를 지원하지만, 동적 변수는 컴파일러가 런타임 타입에 대해 아무것도 알지 못하기 때문에 "인텔리전트 센스"를 지원하지 않습니다. 동적 변수에 대해 Intelligent Sense를 사용하면 "이 동작은 런타임에 해결됩니다"라는 프롬프트가 뜨게 됩니다.

동적 변수가 객체 변수라는 사실은 IL 코드로 확인할 수 있으며, IL 코드는 여기에 게시되지 않습니다. 물론 컴파일러는 직접 객체 변수를 구분하기 위한 동적 선언도 처리합니다.

MSDN에서는 상호운용성을 단순화하기 위해 dynamic이 널리 구현되어 있으며, 이 때문에 일부 개발자들이 오해받는 것 같습니다. 많은 개발자들이 COM+나 OFFICE 같은 코딩을 잘 사용하지 못하기 때문에, 긴급히 동적 애플리케이션 이유가 필요합니다. 그래서 일상 개발에서는 역동성이 중요하다고 생각합니다:

타입 변환
동적 타입 인스턴스와 다른 유형의 인스턴스 간 전환은 간단하며, 개발자들은 다이믹과 비동적 동작 사이를 쉽게 전환할 수 있습니다. 어떤 인스턴스든 암묵적으로 동적 타입 인스턴스로 변환될 수 있으며, 다음 예시를 참조하세요:
동적 d1 = 7;
동적 d2 = "문자열";
동적 D3 = System.DateTime.Today;
dynamic d4 = System.Diagnostics.Process.GetProcesses();
반대로, 암묵적 변환은 동적 타입의 모든 표현식에 동적으로 적용할 수 있습니다.
반대로, 타입 동적 표현식은 암묵적으로 다른 타입으로 변환될 수도 있습니다.
지능 i = d1;
끈 스트랴 = d2;
DateTime dt = d3;
System.Diagnostics.Process[] procs = d4;
동적 타입 매개변수가 적용되는 과부하 문제
메서드가 호출되어 동적 타입의 객체를 전달하거나, 호출되는 객체가 동적 타입이라면, 오버로드 판정은 컴파일 시가 아니라 런타임에 발생합니다.
동적 언어 런타임 DLR
동적 언어 실행 시간은 입니다. NET Framework 4 Beta 1은 C#에서 동적 타입을 지원하고 IronPython, IronRuby와 같은 동적 프로그래밍 언어를 구현하는 새로운 API 세트입니다.
동적 기능은 반사를 단순화합니다.

이전에는 다음과 같은 반사를 사용했습니다:



이제 간단히 쓸 수 있는 방법이 있습니다:


우리는 이러한 단순화를 무시할 수도 있지만, 결국 코드가 크게 축소되지 않은 것 같지만, 효율성과 아름다움이라는 두 가지 특성을 고려하면 동적 기능의 장점은 분명합니다. 컴파일러는 비캐시 반사 효율보다 훨씬 빠르도록 동적 최적화를 수행합니다. 비교해야 한다면, 위 두 코드(Add 메서드 호출 부분)를 1000000 단위로 실행해 결론을 내릴 수 있습니다.






이전의:mvc는 게시물의 JSON XML 데이터를 가져옵니다
다음:인식 오류가 발생했습니다. 1행 근처, 10번 열에
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com