Reflection .NET (C#)에 대한 경험이 거의 없지만이를 사용하는 가장 좋은 방법을 찾으려고합니다. 저의 이해는 성능 문제로 인해 최소한으로, 그리고 하위 레벨 라이브러리 내에서 사용하는 것이 가장 좋습니다. 이것은 사실입니까, 그렇지 않다면 왜 안됩니까?반사 (C#)를 사용하기에 가장 적합한 추상화 수준은 무엇입니까?
답변
리플렉션은 일반적으로 리플렉션을 사용하지 않는 것처럼 느리지 않으므로 "느린"프로세스이며,보다 전통적인 방식으로 회피 될 수있는 경우 리플렉션을 남용하지 않는 것이 좋습니다.
일부 유사한 질문
는 종종 충분히 빠른 솔루션, here 및대부분의 사람들은 말할 것이다으로 here 있습니다. 유스 케이스가 너무 느리거나 불필요한 것인지 판단하기 위해 성능 테스트를 실행해야한다.
어디에 사용할지에 대해서는별로 중요하지 않겠지 만 뷰 모델이나 ASP.NET 컨트롤러에서이를 악용하는 것은 일반적으로 UI와 관련된 우려가 있으므로 이해가되지 않을 수 있습니다. 그러나 반성이 필요한 시점에 대한 사례 별 결정이므로 재판관이되어야합니다. 리플렉션은 하위 수준 라이브러리에서만 사용해야한다고 말하는 어렵고 빠른 규칙은 없습니다.
반사가 많은 문제를 해결할 수 있으며 가장 쉬운 해결책 인 경우 코드를 테스트해야합니다. 리플렉션이 느리게 끝나면 리팩토링하고 다른 것을 시도하십시오.
감사합니다. 이것은 중복으로 간주 될 수 있으므로 그와 같이 표시 될 수 있습니까? – ryanwebjackson
@ryanwebjackson 나는 그것을 중복으로 표시했다. 그것은 검토 중입니다. – Carson
@ryanwebjackson 똑같은 질문이라고 생각하시면 제안 된 사본을 수락 할 수있는 버튼이 있어야합니다. 같은 질문이라고 생각하시면 – Rob
내 생각에 (따라서 스택 오버플로에 대한 주제에 관한 질문이 아닌 이유는) 성능이 2 차적입니다. - 언어가 제공하는 모든 유형 안전성을 잃어 버렸습니다. 낮은 수준의 라이브러리가 아닌 모든 레벨에서 리플렉션을 발견 할 수 있습니다. – Rob
리플렉션을 사용하면 좋은 인텔리 센스가 발생하지 않아 유형 검사를 피할 수 있습니다. 이는 개인 메소드, 변수에 대한 액세스와 같은 OOP 원칙을 위반합니다. 직접 접근보다 느립니다. 그러나 아키텍처가 중요하고 시스템이 너무 복잡해지면 유용성이있는 유용한 사례가 있습니다. 그런 다음 시스템이 너무 복잡 해지면 제어가 반전 된 경우에 도움이 될 수 있지만 그 곳에서도 피할 수 있습니다. 리팩토링 중 끊어 지거나 빌드 타임에 스레드 안전성 체크가 필요하지 않습니다. 실제로 필요할 때 사용하거나 실질적으로 단순화합니다. – ipavlu