【发布时间】:2019-05-18 19:43:48
【问题描述】:
我没有看到类似的问题,所以我希望我没有错过任何东西。
我很好奇在按值传递该字段时是否保留了类内字段的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 工具提示告诉了我很多信息。但是如果我只是按值传递,我不会收到警告/通知。
有人有这方面的经验吗?谢谢,祝你好运。
【问题讨论】:
标签: c# pass-by-reference volatile pass-by-value