2016-07-28 14 views
1

少しの実験として、自分のクラスファイルの1つを編集するコードを書きました。具体的に編集後のソースファイルの更新 - C#

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

私は動的にプログラム自体を通じて '関数' メソッドを編集しています。したがって、field1%field2を返す場合、単に「return field1%field2;」と入力してボタンを押すと、ファイルストリームは実際のソースコードを編集します。

しかし、これはプログラムが閉じられるまでクラスファイルに影響を及ぼさないと思われ、再オープンされたときに有効になります。 dealioは何ですか?

ここで書くコードです:

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#がコンパイルされています。ソースの変更は、ソースを再コンパイルしてアプリケーションを再配布するまで有効になりません。 – Chris

+0

ありがとうございます。ユーザーがプログラムを再起動する以外に、これを回避する方法はありますか? – user3112622

+0

いいえ。C#を解釈済みのプログラムにすることはできません。文字列( "field1%field2"のような)を取って動的にコンパイルして評価することで、偽造することができますが、アプリケーションのソースコードを変更して、アプリケーションが再コンパイルされるまで何もすることはできません。 – itsme86

答えて

1

この背後にある理由は、あなたのIDEを通して、あなたのプログラムを実行するか、またはコマンドラインから、それをコンパイルするとき、それは「コンパイル。」されているという事実であるが、したがって、ファイルを編集すると、ソースコードを編集していることになります。しかし、いったんプログラムにコンパイルされたら、ソースコードを使用しなくなります。したがって、IDEを使用してプログラムを再起動すると、プログラムを再コンパイルしているので、変更が有効になります。私が知っている限り、プログラムそのものを使ってプログラムの実際のコードを編集する方法はありません。 OSは、実行中にプログラムのバイナリデータを編集することを許可しません。 回避策の場合、実際のコードを編集する必要はありませんSystem.Reflectionは、文字列でメソッドを取得して呼び出すことを可能にする名前空間です。別の方法でthisポストを見ることもできます。これらを使用すると、恐らくobject.Equals()のようなメソッドを動的に呼び出すことができます。これはあなたのニーズを満たすことができます。がんばろう!

関連する問題