编辑后更新源文件-C#

编辑后更新源文件-C#,c#,file,C#,File,作为一个小实验,我编写了一些代码来编辑它自己的一个类文件 具体而言: namespace Dynamic { class DynamicFunction { public double Function(double field1, double field2) { //Reference return field1; //EndReference }

作为一个小实验,我编写了一些代码来编辑它自己的一个类文件

具体而言:

namespace Dynamic
{
    class DynamicFunction
    {
        public double Function(double field1, double field2)
        {
            //Reference
            return field1;
            //EndReference
        }
    }
}
我正在通过程序本身动态编辑“函数”方法。因此,如果要返回field1%field2,只需输入“returnfield1%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;

这背后的原因是,当您通过IDE运行程序或通过命令行编译程序时,它是“已编译”的。因此,当您编辑文件时,您就是在编辑源代码。然而,一旦程序被编译,它就不再使用源代码了。因此,当您通过IDE重新启动程序时,更改将生效,因为您正在重新编译程序。据我所知,无法通过程序本身编辑程序的实际代码。操作系统不允许您在程序运行时编辑程序的二进制数据。不涉及编辑实际代码的解决方法可以是使用一个名称空间,该名称空间允许通过字符串获取和调用方法。你们也可以看到一个不同方法的帖子。有了这些,您可能可以动态调用像
object.Equals()
这样的方法,这些方法可能能够满足您的需要。祝你好运

C#是编译的。在重新编译源代码并重新运行应用程序之前,对源代码的更改不会生效。谢谢。除了让用户重新启动程序之外,还有什么办法可以解决这个问题吗?没有。你不能让C#成为解释程序。您可以通过获取字符串(如“field1%field2”)来伪造它,动态编译并计算它,但您不能仅仅更改应用程序的源代码,并期望它在重新编译应用程序之前做任何事情。显然,动态创建/编译代码和“C#脚本”有很多问题。。。非常奇怪的是,你最喜欢的搜索引擎在这个主题上什么也没找到……你可以运行一个程序,编辑一些源代码,然后编译它,然后启动一个新进程,执行编译后的内容。然而,我会找出你所做的是否是满足你需求的最佳解决方案。