現在教えているコースの自動「評価者」を実装しています。全体的な考え方は、すべての学生がいくつかのアルゴリズムを実装した DLL を配布するというものです。私の評価者は、Reflection を使用してこれらすべての DLL をロードし、学生の実装を見つけて、トーナメントで評価します。これらのアルゴリズムはすべてブラックボックス オプティマイザーであり、次のインターフェイスを実装します。
public interface IContinuousMetaheuristic
{
// ... Some unimportant properties
Vector Evaluate(Function function, int maxEvaluations, ...);
}
Function
(少なくとも関連部分)のクラス定義は次のとおりです。
public class Function:
{
private Vector xopt; // The optimum point
private double fopt; // The optimum value
public double Evaluate(Vector x);
}
ご覧のとおり、Function
これらのメタヒューリスティックにインスタンスを渡す必要があります。これらの機能は自分で実装しています。それらのほとんどは、ある意味でランダムです。つまり、関数コンストラクターでランダムな最適点を選択します。そのためxopt
、クラスにフィールドが表示されます。問題は、生徒がリフレクションやその他の手法でxopt
またはフィールドにアクセスできないようにしたくないことです。 fopt
.
したがって、一般的な質問は次のとおりです。動的にロードしたコードでリフレクションの使用を禁止する方法はありますか、または他の意味で、このコードがプライベート フィールドにアクセスすることを禁止する (チート) 方法はありますか。
前もって感謝します。