2009-07-09 5 views
2

저는 C# 응용 프로그램을 가지고 있으며 텍스트에 정의 된 함수를 실행하여 A 클래스의 매개 변수 하나를 가져 와서 double을 반환하려고합니다.프로그래밍 방식으로 C# 코드 컴파일 및 실행

파라미터 "A"약간 구조화 된 데이터 것이고, 함수 A.

(상상했다 속성 NUM1, NUM2, 한 화학식 평균을 반환하도록 정의하고, 또 임의에 따라 수식 것 return num1 * 2).

마찬가지로 텍스트 소스에서 함수 정의를로드하고 어떤 방식으로 컴파일하고 실행하려고합니다.

코드의 구조면에서 함수의 본문을 임의의 클래스의 멤버 함수로 주입 할 수 있다고 가정합니다. 또는 대리자를 컴파일 한 다음 매개 변수 컨텍스트를 전달하면됩니다. 또한 충분할 것이다.

어떻게해야합니까?

+0

사용중인 C# 버전을 지정해야한다고 생각합니다. 최신 버전은 이전 버전보다 더 쉽게이 작업을 수행 할 수 있습니다. – MusiGenesis

+0

이전 .NET 1.1 버전이 불행하게도. –

답변

3
+0

CodeDom은 이러한 유형의 문제에 아주 좋습니다. 그러나 CodeDom에서 지원하지 않는 C#의 고급 기능을 사용해야하는 경우 Reflection.Emit 사용을 고려해야합니다. –

+0

링크가 끊어졌습니다 ... – Tim

0

당신은 C# 코드 DOM에서보기를 할 수 있습니다. 이것을 사용하여 C# 코드를 동적으로 작성하고 컴파일 한 다음 실행할 수 있습니다.

매우 위험한 작업이므로 조심하십시오. 아직도 멋진 기능이 환경에 있습니다.

0

C# code here을 컴파일하는 방법에 대한 문서가 있습니다. 당신이 당신의 메소드를 호출 반사를 사용할 필요가하려고하는 컴파일이되면

당신이 IL를 사용해야합니다 LCG와 기존의 클래스로에 주입 할 경우 (정적 제공).

0

이렇게하는 또 다른 방법은 DynamicMethod 클래스를 사용하는 것입니다. 이 작업을 위해서는 IL에 대한 지식이 필요합니다.

런타임에 컴파일하는 것이 더 빠를 것이라고 생각합니다.

1

표현식 분석기를 사용하면 Excel과 같은 식을 입력하고 모든 기본 함수 (통계, 문자열 조작, math/trig)를 사용할 것을 제안합니다. 좋은 결과를 얻으려면 비슷한 요구 사항에 CalcEngine을 사용했습니다. 사용자 정의 함수로 확장 할 수 있습니다.

관련 문제