런타임시 C#에서 클래스를 동적으로 생성하는 것에 대해 궁금해하고이 기사를 우연히 발견했습니다. http://olondono.blogspot.com/2008/02/creating-code-at-runtime.html 런타임시 클래스 생성과 관련하여 장단점에 대해 궁금합니다.런타임시 C# 클래스 만들기
의견이 있으십니까?
런타임시 C#에서 클래스를 동적으로 생성하는 것에 대해 궁금해하고이 기사를 우연히 발견했습니다. http://olondono.blogspot.com/2008/02/creating-code-at-runtime.html 런타임시 클래스 생성과 관련하여 장단점에 대해 궁금합니다.런타임시 C# 클래스 만들기
의견이 있으십니까?
메타 프로그래밍에는 빌드 타임 코드 생성의 모든 이점이 있지만 추가 코드 단계는 없습니다. 이것은 ORM, 시리얼 라이저, AOP, DI/IoC 컨테이너 등의 라이브러리 코드에서 매우 일반적입니다.
DynamicMethod
은 유형과 연관 될 수있는 방법 덕분에 더 접근 할 수있는 실행; 완전히 생성 된 (dll) 코드는 [InternalsVisibleTo]
또는 이와 유사 할 수 있습니다. 불가능할 수도 있습니다.나는 현재 다시 해요 런타임 IL 생성을 사용하기 위해 기존 라이브러리를 씁니다. 그것은 매우 보람이 있으며 나는 그것에 만족합니다. 하지만 그것은 과 다르다. 나는 전에 썼다.
의견을 보내 주셔서 감사합니다. –
이미 런타임 생성 클래스에 대한 경험이있을 것입니다. 제네릭은 런타임에 CLR에 처음 빌드 될 때 빌드됩니다. XmlSerializer의 구현도 마찬가지입니다.
런타임시 빌드 클래스는 매우 복잡합니다 (반사 및 코드 돔 코드를 많이 보지 않는 한). 이것은 가장 단순하고 단순한 해결책이었습니다.
장점 : 필요한 경우 런타임에 만들 수 있습니다.
단점 : 컴파일 타임 검사가 없으므로 잘못 될 경우 모든 것이 터집니다.
기본적으로 리플렉션 사용의 장단점과 동일합니다.
이것은 장단점이 아닙니다.
때로는 다른 방법으로 코드로 변환하는 것이 지루한 정보 나 런타임까지 사용할 수없는 정보를 기반으로 클래스를 만드는 것이 편리합니다.
링크 된 기사의 예제는 이 아니며 사용자는 (응용 프로그램 프로그래머로서)이 일반적으로 수행합니다. 그러나이 도구는 예를 들어 데이터베이스 또는 XML 스키마를 기반으로 클래스를 생성하는 도구에서 유용합니다.
모든 것을 포함하여 시간과 장소가 있습니다 (예 : 제네릭). 그러나 앞서 진행하기 전에 런타임에 클래스를 생성하는 대안을 고려할 것입니다. 클래스 생성에 대한 대안을 유지하는 것이 더 쉽고 쉽습니다.
마음에 샘솟는 것은 메모리 사용량입니다. 요청을 수신 할 때마다 일부 요청을 처리하도록 클래스를 동적으로 빌드하면 매번 같은 값에 대해 새 클래스를 생성 할 위험이 있습니다. 클래스 또는 어셈블리가 앱 도메인에로드되면 언로드 할 수 없습니다. 따라서 생성 된 어셈블리 및 클래스는 가능한 한 캐시하십시오.
이 질문에 대한 추가 사항? Reflection을 사용하여 런타임에 작성한 코드를 어셈블리에 저장할 수 있습니까? 이렇게하면 다시 만들 필요가 없습니다. –
예, 실제로 제공 한 링크는 생성 된 코드를 저장합니다. –
권. 재미 있은 그 부호의 마지막 부분. 얼마나주의를 기울이고 있는지 보여줍니다. 미안합니다. –