A múlt részben elkészített példánkat egészítjük ki a mostani feladatban. Annyiban változik a generálandó forráskód, hogy egy – a Form-on megadható névvel -, létrehozunk egy tagfüggvényt a megadott osztályban, melyben meghívjuk a Console osztály WriteLine metódusát. A metódus egyelőre nem rendelkezik paraméterekkel.
Létre kell hoznunk egy referenciát a meghívandó metódusra, melynek MethodName property-je tartalmazza a függvény nevét.
CodeMethodReferenceExpression methodref = new CodeMethodReferenceExpression();
methodref.MethodName = textBox4.Text;
Szükség van a múlt részben már használt CodeMethodInvokeExpression osztályra, hogy meg tudjuk hívni a megadott metódust.
CodeMethodInvokeExpression caller = new CodeMethodInvokeExpression();
A Method property-ben helyezzük el a referenciaobjektumot.
caller.Method = methodref;
Most megalkotjuk a metódust. Mivel tagfüggvényről van szó, a CodeMemberMethod osztályt használjuk.
CodeMemberMethod method = new CodeMemberMethod();
Neve lesz a szövegmezőben megadott név.
method.Name = textBox4.Text;
Visszatérési értéke VOID.
method.ReturnType = new CodeTypeReference(typeof(void));
A metódusban a Console.WriteLine metódus meghívásához is szükségünk van egy hívó objektumra.
CodeMethodInvokeExpression cinvoke = new CodeMethodInvokeExpression(new CodeTypeReferenceExpression("System.Console"), "WriteLine", new CodePrimitiveExpression("Helló világ!"));
Melyet megadunk a metódus Statements kollekciójában:
method.Statements.Add(cinvoke);
Majd a metódust az osztály tagfüggvényévé tesszük.
A konstruktor megalkotása úgy történik, mint az előző példában:
CodeConstructor constructor = new CodeConstructor();
constructor.Attributes = MemberAttributes.Public;
A konstruktorban a referenciát tartalmazó objektumot csatoljuk a Statements listába, nem pedig magát a metódust:
constructor.Statements.Add(caller);
...
A konstruktort is csatoljuk az osztály tagjai közé:
c.Members.Add(constructor);
...
A Form FORDÍTÁS gombjával lefordíthatjuk, majd futtathatjuk az alkalmazást.