구식 반사가 사용되며 코드 가독성이 저하되는 곳이면 어디에서나 사용할 수 있습니다. 그리고, 당신이 말했듯이, Interop의 일부 시나리오 (저는 때때로 COM과 함께 작업합니다).
꽤 많이 있습니다. dynamic
사용을 피할 수 있으면 피해야합니다. 컴파일 시간 검사, 성능 등
몇 주 전, 나는 this article을 기억했다. 처음 읽었을 때, 나는 솔직히 사과를 받았다. 그러나 내가 깨닫지 못한 것은 내가 심지어 알 수없는 유형의 연산자를 사용하는 방법을 모른다는 것입니다. 생성 된 코드가 다음과 같이 될지 궁금해하기 시작했습니다.
dynamic c = 10;
int b = c * c;
정규 반영을 사용하면 정의 된 연산자를 사용할 수 없습니다. Microsoft
네임 스페이스의 일부 내용을 사용하여 코드가 상당히 생성되었습니다. 위의 코드가 읽기 쉽다는 것을 말합시다. 작동하는 것이 좋습니다.하지만 역시 입니다. 느림 : 일반적인 곱셈 (doh)보다 약 10,000 배 느리고 ICalculator
인터페이스보다 약 100 배 느립니다. Multiply 메서드 사용.
편집 - 생성 된 코드, 관심있는 사람들을위한 :
이
if (<Test>o__SiteContainer0.<>p__Sitea == null)
<Test>o__SiteContainer0.<>p__Sitea =
CallSite<Func<CallSite, object, object, object>>.Create(
new CSharpBinaryOperationBinder(ExpressionType.Multiply,
false, false, new CSharpArgumentInfo[] {
new CSharpArgumentInfo(CSharpArgumentInfoFlags.None, null),
new CSharpArgumentInfo(CSharpArgumentInfoFlags.None, null) }));
b = <Test>o__SiteContainer0.<>p__Site9.Target(
<Test>o__SiteContainer0.<>p__Site9,
<Test>o__SiteContainer0.<>p__Sitea.Target(
<Test>o__SiteContainer0.<>p__Sitea, c, c));
중복 질문이 있으십니까? http://stackoverflow.com/questions/244302/what-do-you-think-of-the-new-c-4-0-dynamic-keyword – Lazarus
을 참조하십시오. 질문은 '좋아하지 않습니다. 그것? ' 그러나 당신은 그것을 어떻게 할 것인가? 그러나 사실 아주 가까운 것입니다. 나는 비슷한 질문에 대한 검색을했지만 이것에 걸리지 않았습니다. – thinkbeforecoding
이것은 "올바른"대답이없는 토론입니다. 따라서 커뮤니티 위키 여야합니다. – ryeguy