2016-07-28 4 views
1

Als kleines Experiment habe ich Code geschrieben, der eine eigene Klassendatei bearbeitet.Quelldatei nach der Bearbeitung aktualisieren - C#

Im Einzelnen:

namespace Dynamic 
{ 
    class DynamicFunction 
    { 
     public double Function(double field1, double field2) 
     { 
      //Reference 
      return field1; 
      //EndReference 
     } 
    } 
} 

ich dynamisch bin die Bearbeitung der 'Funktion' Methode durch das Programm selbst. Also, wenn man field1% field 2 zurückgeben wollte, würde man einfach 'return field1% field2;' eintippen, einen Knopf drücken, und ein Filestream würde den eigentlichen Quellcode editieren.

Es scheint jedoch, dass dies keine Auswirkungen auf die Klassendatei hat, bis das Programm geschlossen wird, dann wird es wirksam, wenn es wieder geöffnet wird. Was ist das Geschäft?

Hier ist das Schreiben von Code: „kompilierte“

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

C# ist kompiliert. Änderungen an der Quelle werden erst wirksam, wenn Sie die Quelle erneut kompiliert und die Anwendung neu gestartet haben. – Chris

+0

Danke. Gibt es eine Möglichkeit, dies zu umgehen, abgesehen davon, dass der Benutzer das Programm neu starten muss? – user3112622

+0

Nein. Sie können C# nicht zu einem interpretierten Programm machen. Sie können es fälschen, indem Sie einen String (wie "field1% field2") nehmen, dynamisch kompilieren und auswerten, aber Sie können nicht einfach den Quellcode der Anwendung ändern und erwarten, dass er etwas tut, bis die Anwendung neu kompiliert wird. – itsme86

Antwort

1

Der Grund dafür ist die Tatsache, dass, wenn Sie Ihr Programm durch Ihre IDE ausführen, oder es über die Befehlszeile kompilieren, ist es Wenn Sie die Datei bearbeiten, bearbeiten Sie daher den Quellcode. Sobald das Programm jedoch kompiliert ist, wird es nicht mehr den Quellcode verwenden. Wenn Sie Ihr Programm über Ihre IDE neu starten, werden die Änderungen wirksam, weil Sie das Programm neu kompilieren. Soweit ich weiß, gibt es keine Möglichkeit, den eigentlichen Code eines Programms durch das Programm selbst zu bearbeiten. Das Betriebssystem erlaubt Ihnen nicht, die Binärdaten eines Programms zu bearbeiten, während es ausgeführt wird. Eine Problemumgehung für diese, die keine Bearbeitung des tatsächlichen Codes beinhaltet, könnte System.Reflection, ein Namespace, der Methoden über Strings abrufen und aufrufen kann. Sie könnten auch this Post für einen anderen Ansatz sehen. Mit diesen können Sie wahrscheinlich dynamisch Methoden wie object.Equals() aufrufen, die in der Lage sein könnten, Ihre Bedürfnisse zu erfüllen. Viel Glück!

Verwandte Themen