Подтвердить что ты не робот

Что такое ContextStaticAttribute?

Из документации:

Статическое поле, помеченное ContextStaticAttribute, не используется между контекстами. Если указанное статическое поле доступно на в другом контексте он будет содержать другое значение. Использовать это атрибут как есть, и не вытекает из него.

В следующем примере показан синтаксис этого атрибута:

[ContextStatic]
static int f=7;

К сожалению, он не уточняет, что подразумевается под "контекстом" в этом случае. Может ли кто-нибудь привести пример, когда этот атрибут будет использоваться?

4b9b3361

Ответ 1

Атрибут имеет значение в случае, когда вы используете удаленный доступ, например класс, полученный из MarshalByRefObject. Затем ваш код работает с прокси-сервером в клиентской программе, поддельный объект класса, который выглядит точно так же, как и исходный класс, но методы которого реализованы в CLR и сериализуют аргументы метода для реального объекта, который выполняется на сервере. Обычно на другой машине.

Поля являются проблемой в таком классе, их нельзя подделать с помощью метода замены. Это то, с чем имеет дело дрожание. Когда он обнаруживает доступ к полю в объекте MRBO, он не генерирует код для непосредственного чтения и записи поля, вместо этого он вызывает вспомогательный метод в CLR. Кто знает, является ли объект прокси или реальным объектом и либо напрямую возвращает значение поля, либо делает удаленный вызов вместо этого.

Это добавляет накладные расходы, конечно, проблему со статическим полем, к которому можно получить доступ очень часто. Атрибут [ContextStatic] говорит, что вы не заботитесь о фактическом значении статического поля, его местная копия достаточно хороша. Или его можно использовать намеренно, если по какой-то причине важно следить за состоянием государства. Я не могу придумать хороший пример этого. Кроме того, разработчики фреймворка не использовали его внутри кода рамки.

Ответ 2

Как указано в комментариях, документация в разделе see также указывает на документацию Конкретные контексты, что делает ее более понятной, чтобы копать.

Лучший ресурс по теме, который я смог найти, - http://blogs.msdn.com/b/tilovell/archive/2011/02/07/contextboundobject-part-1-making-contexts.aspx

Вкратце - в 99% случаев этот атрибут не является тем, на что он может смотреть на первый взгляд.