Wdrażam automatyczny "oceniający" dla kursu, który obecnie uczę. Ogólny pomysł jest taki, że każdy uczeń dostarcza bibliotekę DLL z zaimplementowanymi algorytmami. Mój oceniający ładuje wszystkie te biblioteki DLL za pomocą Reflection, znajduje implementacje uczniów i ocenia je w turnieju. Wszystkie te algorytmy są optymalizujące black-box, które realizują następujące interfejsUnikanie kodu użytkownika wywołującego odbicie w C#
public interface IContinuousMetaheuristic
{
// ... Some unimportant properties
Vector Evaluate(Function function, int maxEvaluations, ...);
}
Definicja klasy dla Function
(przynajmniej odpowiednia część) jest:
public class Function:
{
private Vector xopt; // The optimum point
private double fopt; // The optimum value
public double Evaluate(Vector x);
}
Jak widać, muszę przekazać instancję Function
do tych metaheurystyk. Te funkcje są realizowane przeze mnie. Większość z nich jest w pewnym sensie przypadkowa, tzn. Wybieram losowy optymalny punkt w konstruktorze funkcji. Właśnie dlatego możesz zobaczyć w klasie klasę xopt
. Problem polega na tym, że nie chcę, aby moi studenci mieli dostęp do pól xopt
lub fopt
przez Reflection lub jakąkolwiek inną technikę, ponieważ byłoby to oszukiwanie, a przynajmniej dowiedzenie się, czy robią to, więc mogę ich ukarać ;).
Tak więc ogólne pytanie brzmi: czy istnieje sposób, aby zabronić użycia Reflection w kawałku kodu, który wczytałem dynamicznie, lub w jakimkolwiek innym sensie uniemożliwić ten kod dostępu do prywatnych pól (oszukiwanie).
Z góry dziękuję.
Czy 'optymalną point' ** ** muszą być w' Function 'klasa, czy nie możesz po prostu przechowywać go w innej strukturze danych niedostępnej w bibliotece referencyjnej, którą dasz uczniom? –
Czy nie byłoby prostsze po prostu odłączyć funkcję oceny wektora od wartości optymalnych? Jeśli przekażesz je tylko 'Func', będą mieć trudności z kradzieżą optymalnych odpowiedzi. –
Rawling
Możliwe jest również zduplikowanie http://stackoverflow.com/questions/4447939/jest-to-pozwoli- do-uczenia-odbieranie-z -zespołu- – Rawling