好的嗨这里是一个快速直截了当的问题点。
public class MyTestClass
{
private static float FloatField;
public static float MethodA( float yourFloat)
{
FloatField = yourFloat / 10 * 0.125f;
return FloatField;
}
public void SomeOther_Non_Static_Method()
{
}
}
public class ClassA
{
float FloatA;
void Running()
{
FloatA = MyTestClass.MethodA(1.2f);
}
}
public class ClassB
{
float FloatB;
void Running()
{
FloatB = MyTestClass.MethodA(8.4f);
}
}
正如您所知,FloatField
将同时在MyTestClass.MethodA
和ClassA
ClassB
分配一个值。因此,覆盖设置的值可以是。
我希望它不会发生重叠。
要指出一些事情。 MyTestClass
中的浮动方法必须保持静态。 MethodA
中MyTestClass
的结构必须保持不变
我不想相信自己已经走到尽头了,现在完全不可能做到这一点。我认为必须有办法。如果您有任何想法,请分享。
答案 0 :(得分:1)
有两种方法:
FloatField
。这是第一种方法:
public static float MethodA( float yourFloat) {
var temp = yourFloat / 10 * 0.125f;
FloatField = temp;
return temp;
}
这是第二种方法:
private static Object floatFieldLock = new Object();
public static float MethodA( float yourFloat) {
lock (floatFieldLock) {
FloatField = yourFloat / 10 * 0.125f;
return FloatField;
}
}
这两种方法都将解决在同时调用MethodA
时返回错误结果的问题。这两种方法都不会解决固有的竞争条件,因为FloatField
的结束值将被设置为写入它的最后一个值,这是一个随意的选择。