Я работаю над игрой (C #), в которой используется Робокодоподобная модель программирования : участники наследуют базовый класс и добавляют стратегическое поведение. Затем игра загружает экземпляры классов участников и начинается соревнование. К сожалению, участники могут «обманывать», разделяя статические переменные между экземплярами класса своего конкурента.
Как предотвратить совместное использование статических переменных между экземплярами класса в языке .NET? Я знаю, что это достигается в Java с помощью отдельного ClassLoader для каждого экземпляра. Что такое эквивалент .NET?
Кроме того, мое тестирование показывает, что отдельные домены приложений работают только при загрузке класса, расширяющего MarshalByRefObject. Я предполагаю, что это имеет смысл - если вы просто загружаете Serializable Class, этот класс копируется в текущий AppDomain, поэтому второй объект из другого AppDomain будет использовать свои статические переменные. MarshalByRefObject гарантирует, что в текущий AppDomain загружен только прокси, а статические данные остаются в загружаемом AppDomain. Смотрите также: http://blogs.msdn.com/ericlippert/archive/2004/05/27/143203.aspx