作为一个小实验,我编写了一些代码来编辑自己的一个类文件。
具体做法是:
namespace Dynamic
{
class DynamicFunction
{
public double Function(double field1, double field2)
{
//Reference
return field1;
//EndReference
}
}
}
我通过程序本身动态编辑'Function'方法。因此,如果想要返回field1%字段2,他们只需输入'return field1%field2;',点击一个按钮,文件流就会编辑实际的源代码。
但是,在程序关闭之前,它似乎对类文件没有影响,然后在重新打开时生效。什么是有效的?
这是编写代码:
System.IO.File.Delete(path);
using (System.IO.StreamWriter W = new System.IO.StreamWriter(path))
{
foreach (string s in C)
{
if (!s.Contains("return"))
{
W.WriteLine(s);
}
if (s.Contains("return"))
{
W.WriteLine(textBox3.Text);
}
}
}
int r = 0;
答案 0 :(得分:1)
这背后的原因是,当您通过IDE运行程序或通过命令行编译程序时,它已被编译。"因此,在编辑文件时,您需要编辑源代码。但是,一旦程序编译,就不再需要使用源代码了。因此,当您通过IDE重新启动程序时,更改将生效,因为您重新编译该程序。据我所知,没有办法通过程序本身编辑程序的实际代码。操作系统不允许您在程序运行时编辑程序的二进制数据。不需要编辑实际代码的解决方法可以使用System.Reflection
,这是一个允许通过字符串获取和调用方法的命名空间。您还可以看到this发布不同的方法。有了这些,您可以动态调用object.Equals()
等可能满足您需求的方法。祝你好运!