gpt4 book ai didi

c# - 避免用户代码调用 C# 中的反射

转载 作者:可可西里 更新时间:2023-11-01 08:12:22 25 4
gpt4 key购买 nike

我正在为我目前正在教授的类(class)实现一个自动“评估器”。总体思路是每个学生都提供一个实现了一些算法的 DLL。我的评估员使用反射加载所有这些 DLL,找到学生实现并在锦标赛中评估它们。所有这些算法都是黑盒优化器,实现了以下接口(interface)

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 字段的原因。问题是,我不希望我的学生能够通过反射或任何其他技术访问 xoptfopt 字段,因为那样会作弊,或者在至少,查明他们是否这样做,以便我可以相应地惩罚他们;)。

所以,一般的问题是:有什么方法可以禁止在我动态加载的一段代码中使用反射,或者以任何其他方式禁止这段代码访问私有(private)字段(作弊)。

提前致谢。

最佳答案

他们给你源代码吗?编写一个单独的工具来查找“using System.Reflection”和“System.Reflection”。在源代码中。如果他们想出一个巧妙的技巧来避免这种情况,也许他们应该通过作弊获得额外的分数。 :)

此外,他们使用的代码中的这个怎么样:

private double FakeOptimumPointWithAConvincingName{ get { return 12.07; } }

然后在运行评估程序时将其更改为:

private double FakeOptimumPointWithAConvincingName{ get { throw new SomeoneCheatedException(); } }

沿着这条线还有很多其他聪明的事情要做;关键是您可以使用技巧而不是技术来阻止它们。如果他们想出了更好的把戏,那就恭喜了。 :)

关于c# - 避免用户代码调用 C# 中的反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11156274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com