gpt4 book ai didi

c# - 在非静态类中,如何保留在多个不同类中同时调用的静态方法中使用的静态变量的值

转载 作者:行者123 更新时间:2023-12-03 11:10:18 25 4
gpt4 key购买 nike

我有一个非静态类,其中有一个静态方法和一个 ChangeCkecker 类型的静态变量

此代码 (ChangeChecker)。 “Changed”接受一个对象参数,将其与另一个对象进行检查,如果两者不匹配,则返回 true

        public class ChangeChecker
{

public object Backup_Object_Value;

public ChangeChecker() { }
public bool Changed(object obj)
{
bool result = false;

if (!obj.Equals(Backup_Object_Value))
{
Backup_Object_Value = obj;
result = true;
}
return result;

}

}

在我的非静态类“ClassA”的静态方法中,我想仅在“Changed”为 true 时执行函数

        public class ClassA
{
private static ChangeChecker value = new ChangeChecker();

public static void MethodA(Rect area)
{
if(value.Changed(area))
{
Debug.Log("ChangeMade");
}

}

}

ClassB和ClassC都调用classA.MethodA

    public class ClassB
{

void Update()
{
ClassA.MethodA(new Rect(2,2,20,20));
}
}
public class ClassC
{

void Update()
{
ClassA.MethodA(new Rect(0,100,100,100));
}
}

发生的情况是,由于 ClassB 和 ClassC 同时调用 ClassA.MethodA,ClassA ChangeChecker 变量被覆盖,并且该函数停止正常工作

是否有一个属性可以用来标记 ClassA 中的 ChangeChecker 变量,以便它不会每次都被覆盖?

这在静态类和静态方法中使用之外非常有效,因为我将使用 ChangeChecker 的实例。你能帮助我让它正常工作吗?

感谢您的宝贵时间。

最佳答案

What is happening is that because ClassB and ClassC are both calling ClassA.MethodA simultaneously, ClassA ChangeChecker variable gets overridden and the function stops working correctly

仅当多个线程访问静态方法时才会出现这种情况。

如果不是这种情况,则对静态方法的第一次调用将在第二次调用开始之前完成。

如果您从多个线程访问它,则需要包含适当的多线程安全性。您可以首先检查 lock声明。

如果您需要有关多线程编程的更多信息,这是我的 favorite tutorial .

关于c# - 在非静态类中,如何保留在多个不同类中同时调用的静态方法中使用的静态变量的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32748249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com