Я не видел вопросов, похожих на мои, поэтому надеюсь, что ничего не пропустил.
Мне любопытно, сохраняется ли свойство volatile
поля внутри класса при передачеэто поле по значению (то есть создается ссылка на локальную копию, которая указывает на исходный объект).
Предупреждения VS в значительной степени говорят мне, что передача по ссылке на поле volatile
не сохраняет волатильностьЭто.Но мне было интересно, если при передаче по значению сохраняется свойство volatile
.
Примеры кода, иллюстрирующие проблему:
class static Singleton
{
private static volatile MyObject myObject;
private static readonly object syncRoot = new object();
public static MyObject My => HandleObject(syncRoot, myObject);
private void HandleObject(object syncRoot, MyObject myObject)
{
if(myObject.SomeProperty) //is the myObject reference still volatile?
{ /* some other code */ }
}
}
Как я уже говорил выше, мой вопрос: myObject
справочная копия по-прежнему volatile
в методе HandleObject
?
Я знаю, что если я изменю сигнатуру HandleObject
на void HandleObject(object syncRoot, ref MyObject myObject)
, я потеряю волатильность, поскольку подсказка VS говорит мне об этом.Но я не получаю предупреждения / уведомления, если я просто передаю по значению.
У кого-нибудь есть опыт с этим?Спасибо и хорошего.