Kontynuując ten excellent answer, zastanawiam się, czy DLR za pomocą słowa kluczowego dynamic
może pozwolić na mniej szczegółowy sposób pisania kodu dla wygenerowanego zespołu.Użyj funkcji DLR do uruchomienia kodu wygenerowanego za pomocą CompileAssemblyFromSource?
Można na przykład kod wymienionej powyżej zwrotna:
using (Microsoft.CSharp.CSharpCodeProvider foo =
new Microsoft.CSharp.CSharpCodeProvider())
{
var res = foo.CompileAssemblyFromSource(
new System.CodeDom.Compiler.CompilerParameters() {
GenerateInMemory = true
},
"public class FooClass { public string Execute() { return \"output!\";}}"
);
var type = res.CompiledAssembly.GetType("FooClass");
var obj = Activator.CreateInstance(type);
var output = type.GetMethod("Execute").Invoke(obj, new object[] { });
}
stać się coś takiego:
using (Microsoft.CSharp.CSharpCodeProvider foo =
new Microsoft.CSharp.CSharpCodeProvider())
{
var res = foo.CompileAssemblyFromSource(
new System.CodeDom.Compiler.CompilerParameters() {
GenerateInMemory = true
},
"public class FooClass { public string Execute() { return \"output!\";}}"
);
var type = res.CompiledAssembly.GetType("FooClass");
dynamic obj = Activator.CreateDynamicInstance(type);
var output = obj.Execute();
}
Tak, jest trochę mniej kodu. Zrób to działa, używając zamiast tego 'Activator.CreateInstance()'. Nie widzę innego pytania. –
Tak, po prostu wypróbowałem i zdałem sobie sprawę, że "po prostu działa" z 'dynamic' zamiast' var'. Całkiem fajne rzeczy. –