Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > компиляции в реалтайме


Автор: Chef 13.3.2008, 19:24
Поготи пожалуста, скомпилировать код могу, а вот вызвать метод класса незнаю как ?

Код

string code = @"public class num
                           {
                            public int sum()
                           {
                                return 4 * 3;
                           }
                           }";

            CSharpCodeProvider provider = new CSharpCodeProvider();
            ICodeCompiler compiler = provider.CreateCompiler();
            CompilerParameters cp = new CompilerParameters();
            cp.ReferencedAssemblies.Add("System.dll");
            cp.ReferencedAssemblies.Add("using System");
            //плюс еще необходимые референсы
            cp.GenerateExecutable = false;
            cp.GenerateInMemory = true;
            CompilerResults cr = compiler.CompileAssemblyFromSource(cp, code);


Автор: Chef 14.3.2008, 08:00
Люди вы где !! Помогите пожалуйста !

Автор: Linus 14.3.2008, 08:43
Код

//Получаем тип из скомпилированной сборки
Type t=cp.CompiledAssembly.GetType("num");

//Создаём его экземпляр
object o=Activator.CreateInstance(t);
try
{
       t.GetMethod("sum").Invoke(o,new object[]{}); //Вызываем метод
}
catch(Exception ee)
{
       Console.WriteLine(ee.ToString());
}

Автор: Chef 14.3.2008, 20:43
Код

string code = @"public class num
{
       public float sum(int[] ar)
        {
             return " + res +"; "+
              @"}
}";

CSharpCodeProvider provider = new CSharpCodeProvider();
ICodeCompiler compiler = provider.CreateCompiler();
CompilerParameters cp = new CompilerParameters();
cp.ReferencedAssemblies.Add("System.dll");
            
cp.GenerateExecutable = false;
cp.GenerateInMemory = true;
CompilerResults cr = compiler.CompileAssemblyFromSource(cp, code);

Type TNum = cr.CompiledAssembly.GetType("num");
ConstructorInfo ConInfo = TNum.GetConstructor(Type.EmptyTypes);
object numCl = ConInfo.Invoke(new object[] { });

MethodInfo mInfo = TNum.GetMethod("sum");


Подсказал однокурсник..... истина гдето рядом...... smile 

но возник не мение важный вопрос ? А как передать массив в метод ? Это двух мерный массив получаеться нужно отправлять в  Invoke ? Кто что скажет ?

Все решил что сразу не допер.....
Код

int[] ar = new int[2] { 0, 67 };
object obj = mInfo.Invoke(numCl, new object[1] { ar });




Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)