ओह, सी # उस तरह एक गतिशील भाषा नहीं है। आप वास्तव में यह आसानी से नहीं कर सकते हैं, और यदि यह वास्तव में कुछ करने की ज़रूरत है, तो अपनी आवश्यकताओं के अनुरूप, नेट नेट भाषा का उपयोग करने पर विचार करें, जैसे आयरनपीथन या आयरन रूबी।
में आपका सर्वश्रेष्ठ उपलब्ध विकल्प this forum thread शो से, CodeDom नाम स्थान का उपयोग करने के लिए इस सही मायने में जटिल और जघन्य उदाहरण के रूप में है:
using System;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Reflection.Emit;
using System.Text;
using System.Windows.Forms;
namespace TestApp
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
SampleLib.SampleType test = new SampleLib.SampleType();
private void button1_Click(object sender, EventArgs e)
{
// Dynamically build and call the method
label1.Text = test.MyText;
}
private void button2_Click(object sender, EventArgs e)
{
StringBuilder DynamicCode = new StringBuilder();
DynamicCode.Append("namespace TestDynamic");
DynamicCode.Append("{");
DynamicCode.Append("public class DynamicCode");
DynamicCode.Append("{");
DynamicCode.Append("public static void EditText(SampleLib.SampleType t)");
DynamicCode.Append("{");
DynamicCode.Append("t.MyText = \"Goodbye!\";");
DynamicCode.Append("}");
DynamicCode.Append("}");
DynamicCode.Append("}");
string CodeString = DynamicCode.ToString();
System.IO.FileInfo fi = new System.IO.FileInfo(Application.ExecutablePath);
CodeDomProvider provider = CodeDomProvider.CreateProvider("C#");
CompilerParameters CompileParams = new CompilerParameters(new string[] { fi.DirectoryName + "\\SampleLib.dll" },
fi.DirectoryName + "\\Dynamic.dll");
CompileParams.MainClass = "DynamicCode";
CompileParams.GenerateExecutable = false;
//CompileParams.GenerateInMemory = true;
CompilerResults r = provider.CompileAssemblyFromSource(CompileParams, new string[] {CodeString});
foreach (CompilerError er in r.Errors)
{
Console.WriteLine(er.ErrorText);
}
}
private void button3_Click(object sender, EventArgs e)
{
// Dynamically call assembly
System.IO.FileInfo fi = new System.IO.FileInfo(Application.ExecutablePath);
Assembly dynAsm = Assembly.LoadFile(fi.DirectoryName + "\\Dynamic.dll");
if (dynAsm != null)
{
object o = dynAsm.CreateInstance("TestDynamic.DynamicCode", true);
Type t = dynAsm.GetType("TestDynamic.DynamicCode");
t.GetMethod("EditText").Invoke(o, new object[]{test});
}
}
}
}
स्रोत
2010-01-21 05:31:39
सुनिश्चित नहीं हैं कि अगर यह एक नकली है, लेकिन आप की संभावना एक तरह से सी # में REPL के लिए करने के लिए के लिए देख रहे हैं, और एक अच्छा सवाल ही नहीं है इसके बारे में यहां: http://stackoverflow.com/questions/1038106/ या यहां http://stackoverflow.com/questions/2058715/ जो कुछ विचार/स्रोत कोड प्रदान कर सकता है। –