私は多くの計算を行っているC#winformアプリを持っています。プロセスをトリガーするための「実行」ボタンがあります。プログラムを再起動せずに、情報を「再トリガー、再実行、または再送信」できるようにしたいと思います。問題は、リセットする必要のある変数がたくさんあることです。すべてのパラメーターの定義を解除(リセット)する方法はありますか?
private Double jtime, jendtime, jebegintime, javerage, .... on and on
これらの変数を格納するオブジェクトのインスタンスを作成します。このオブジェクトを参照し、「リセット」する場合は、オブジェクトを再インスタンス化します。例えば
public class SomeClass
{
public double jTime;
...
}
...
SomeClass sc = new SomeClass();
sc.jTime = 1;
sc = new SomeClass();
最良の方法は、クラスに全員がいる場合です。
次に、リセット時に、初期化された値で新しいクラスを作成するだけです。
リフレクションを使用できます。リフレクションは他の提案されたソリューションよりもパフォーマンスが低くなりますが、ソリューション ドメインについて完全には確信が持てず、リフレクションが適切なオプションである可能性があります。
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Data data = new Data();
//Gets all fields
FieldInfo[] fields = typeof(Data).GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly);
foreach (var field in fields)
{
//Might want to put some logic here to determin a type of the field eg: (int, double)
//etc and based on that set a value
//Resets the value of the field;
field.SetValue(data, 0);
}
Console.ReadLine();
}
public class Data
{
private Double jtime, jendtime, jebegintime, javerage = 10;
}
}
}
はい、単純に Extract Method リファクタリング手法を使用してください。基本的に別のメソッドでリセットロジックを抽出し、必要なときに呼び出すだけです
private void ResetContext()
{
jtime = jendtime = jebegintime = javerage = 0;
}