2013-03-21 11 views
1

내가 이런 CodeTypeDeclaration의 도움으로 클래스를 선언하고있다 :CodeTypeDeclaration을 가진 클래스를 생성하고 여기에 구성원을 추가

CodeConstructor constructor = new CodeConstructor(); 
constructor.Attributes = MemberAttributes.Public; 

또는 멤버 필드 : 나는 생성자를 추가 할 수 있습니다

CodeTypeDeclaration targetClass = new CodeTypeDeclaration(sType); 

:

CodeMemberField myField = new CodeMemberField(); 
myField.Name = fieldName; 
myField.Type = new CodeTypeReference(fieldType); 

targetClass.Members.Add(myField); 

그러나 어떤 종류의 선을 추가하려고합니다. 예 : 상수 선언 :

const addressFilteresErrorCounters: UInt32 = 0x0000AE77; 

CodeMemberField를 사용하지 않고이 작업을 수행 할 수 있습니까? 어쩌면 내가 어떻게 CodeSnippetStatement 클래스에 추가 할 수 있습니다, 그래서 간단히 말하면, 클래스를 사용하여 힘을 사용하여 일부 라인을 추가하고 CodeMemberField와 함께 선언 라인을 필터링하지?

아마 다음과 같이 매끄러운 :

targetClass.Members.Add(new CodeSnippetStatement("var n = 2")); 

감사합니다.

+0

글쎄, 스 니펫을 사용하는 코드가 작동합니까? – svick

+0

아니요, 쉽게 추가 할 수있는 예일뿐입니다. 나는 그것을 할 수 없어, 그래서 지금은 파일을 열고 나는 수동으로 필요한 라인을 추가하고있다. –

답변

2

CodeSnippetStatement을 직접 클래스에 추가 할 수 없습니다. 당신은, 그러나, 예를 들어 CodeMemberMethod에 추가 할 수 있습니다 :

CodeMemberMethod method = new CodeMemberMethod(); 
method.Name = "DoSomething"; 
method.Attributes = MemberAttributes.Public | MemberAttributes.Final; 
method.Statements.Add(new CodeSnippetStatement("var n = 2;")); 

당신이 상수를 추가 할 CodeSnippetStatement에 의존 할 필요가 없습니다 만. 다음을 사용할 수 있습니다 :

CodeTypeDeclaration exampleClass = new CodeTypeDeclaration("GeneratedClass"); 
CodeMemberField constant = new CodeMemberField(new CodeTypeReference(typeof(System.UInt32)), "addressFilteresErrorCounters"); 
constant.Attributes = MemberAttributes.Const; 
constant.InitExpression = new CodePrimitiveExpression(0x0000AE77); 
exampleClass.Members.Add(constant);