2016-12-16 4 views
-2

独自のメソッドを書くことができるようにC#を使用して:ユーザーが、私はこのような何かを探しているメソッドを持つクラスからオブジェクトを使用してC#のプログラムを持っている

public double TheMethod(double argument1, double argument2, ...,double argumentN) 
{ 
    //method body: do something with the arguments 
    //return the result 
} 

私は、ユーザーに書く能力をさせていただきたいと思い独自のロジックをメソッド本体に追加し、プログラムを実行するときにそのロジックを使用する必要があります。

スクリプティングが行こうと思うかもしれませんが、私は始めようとしています。この状況に近づく最善の方法は何ですか?

注:問題がある場合、プログラムはより大きなメインデスクトップアプリケーションから実行されます。私は、アプリケーションがすでに何らかのエディタプログラムを実行しているときに、コードを書くことができるようにしたいと思います。それらのコードは、実際にこのメソッドを使用するプログラムを起動すると、保存され、使用されます。

+0

https://www.bing.com/search?q=c%23+scripting(またはYahoo、Yandexなどの検索エンジンが好きな他の検索エンジンについては、すでにたくさんの質問と記事があります。おそらくGoogleは十分ではなかった)。 「{スクリプトの作成}を開始しようとすると困っています」とは、多くの提案のうちの1つを実装した問題の説明が非常に悪いことです。 –

答えて

1

ユーザーがc#で記述したい場合は、ファイル(またはメソッドの本体)を別のコピーに置き換えて、実行する前にサブアプリケーションを再コンパイルするのが最も簡単な方法です。

ランタイム中にメソッド本体のライブ置換を行うことは可能ですが、それは心のためではありません! https://msdn.microsoft.com/en-us/library/system.reflection.emit.aspx

あなたがあなた自身のミニスクリプト言語を作成するための作業を行うには満足している場合、あなたは確かに動的にC#のをコンパイルし、実行することができANTLR http://www.antlr.org/

+0

Reflection.Emitはまったく別の話であり、コンパイラの構築に役立ちます。 –

+0

@AlexeiLevenkovあなたの声明を説明するために気をつけますか?彼のリンクに続いて、ドキュメントは次のようになっています。「これらのクラスの主なクライアントは**スクリプトエンジン**とコンパイラです。それは間違っていますか? – Skyqula

1

を見てみましょう。 Is it possible to dynamically compile and execute C# code fragments?

IronPythonは、基本的にはPythonでスクリプトを作成することができます。ユーザーが誰で、どのようにスクリプトを幅広いアプリケーションに統合する必要があるかによって、IronPythonはより良い選択肢になるかもしれません。 C#とIronPythonの統合の詳細については、https://blogs.msdn.microsoft.com/charlie/2009/10/25/running-ironpython-scripts-from-a-c-4-0-program/を参照してください。

常に、外部ソースから動的に注入されたコードを実行する場合は、セキュリティについて考えてください。

+0

IronPythonの提案は有望です。これがスピードにどのような影響を与えるか知っていますか?たとえば、IronPythonでソースコードと同じメソッド本体ロジックを記述すると、IronPythonの実装は大幅に遅くなりますか? – user57029

+0

動的にコンパイルされたコードでは、C#とIronPythonの両方でコードをコンパイルするときに余分な時間がかかるでしょう。 http://stackoverflow.com/questions/3081661/speed-of-code-execution-ironpython-vs-c IronPythonの速度が遅いことを示していますが、おそらく状況によって異なります。あなたのユーザーはどのくらいのコードを注入していますか?実行時間がC#で5秒、IronPythonで7秒の場合、2秒の差分が重要ですか?文脈がなければ、伝えるのは難しいです。 – user783836

関連する問題