c#中全局变量的使用对return的影响?

发布于 2022-09-11 21:44:31 字数 659 浏览 23 评论 0

void func(){
     bool is_do=false;
     if(is_do==false){
         is_do=true;
         return;
     }
     
     if(is_do==true){
         Debug.log("OK")
     }
}

局部变量,不会打印“OK”,显然,是return的作用,跳出了函数func.

如果我换成一个全局变量A.IsDo

class A{
     private static bool isdo=false;
     public static bool IsDo
    {
       set
       {
          isdo= value;
       }
       get
       {
         return isdo;
       }
   }


void func(){
     if(A.IsDo==false){
         A.IsDo=true;
         return;
     }
     
     if(A.IsDo==true){
         Debug.log("OK")
     }
}


就会打印“ok”,说明return没起作用。

请问什么原因?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

喵星人汪星人 2022-09-18 21:44:31

全局变量情况复杂,局部变量在return之后就被销毁,下次进来再重新初始化为false,所以怎样都不会打印OK。类静态变量就复杂了,它一直存在,一直保持原来的值,只在最开始初始化为false一次,比如你这个func方法,执行过一次A.IsDo就会变成true,下次再调用func就会显示ok。

func是否打印ok不仅取决于A.isdo的初值,还取决于之前是否有人把它设置为true,就像func本身就把A.isdo设置为true,不像局部变量 一样会再次初始化为false,所以func是否打印ok不仅仅取决于func的内部逻辑,还取决于之前做了什么。

哭泣的笑容 2022-09-18 21:44:31

单纯的全局变量或者静态变量不会对 return 产生任何意料之外的影响。但这两种情况都可能导致情况变得复杂。比如很可能在任何其他地方,其他时间点,某些操作将这个全局变量的值改变了。尤其是静态变量,任何用户任何线程都可以改变它,进而影响到你。
所以,上述A.IsDo一定是在某些情况被改成了true,导致打印出了“OK”

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文