24

Dec

Scrivere csharp in csharp

Ciao a tutti

 

non molti sanno che è possibile scrivere csharp all’interno del csharp… ovviamente la stessa cosa è fattibile in VB cambiando semplicemente le classi utilizzate.

 

faccio 1 esempio:

 [code language="csharp"]

static void Main(string[] args)
{
    var cs = @"
        namespace InnerNamespace
        {
            public class SimpleClass
            {
                public string GetDateTime()
                {
                    return System.DateTime.Now.ToString();
                }
            }
        }
    ".Trim();

    var compiler = new Microsoft.CSharp.CSharpCodeProvider();
    var compileResult = compiler.CompileAssemblyFromSource(new System.CodeDom.Compiler.CompilerParameters(), cs);

    if (compileResult.Errors.Count == 0)
    {
        var generatedAssembly = compileResult.CompiledAssembly;
        var SimpleClassType = generatedAssembly.GetType("InnerNamespace.SimpleClass");

        // uso la classe per reflection
        var SimpleClassInstance = generatedAssembly.CreateInstance(SimpleClassType.FullName);
        var getDateTimeRispByReflection = SimpleClassType.GetMethod("GetDateTime").Invoke(SimpleClassInstance, null);
        Console.WriteLine(getDateTimeRispByReflection);

        // uso la classe con il DLR
        dynamic SimpleClassDynamicInstance = generatedAssembly.CreateInstance(SimpleClassType.FullName);
        var getDateTimeRispByDLR = SimpleClassDynamicInstance.GetDateTime();
        Console.WriteLine(getDateTimeRispByDLR);
    }
    else
    {
        foreach (var e in compileResult.Errors)
            Console.WriteLine(e);
    }
    Console.ReadLine();
}

[/code]

by Antonio Esposito on 12/24/2010