我正在为我目前正在教授的课程实施一个自动“评估器”。总体思路是每个学生都提供一个实现了一些算法的 DLL。我的评估器使用反射加载所有这些 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
orfopt
字段,因为那将是作弊,或者至少,找出他们是否这样做,以便我可以相应地惩罚他们;) .
所以,一般的问题是:有没有办法在我动态加载的一段代码中禁止使用反射,或者在任何其他意义上禁止这段代码访问私有字段(作弊)。
提前致谢。