C# 基础(六)C# WPF中全面理解 全局变量、局部变量的区别与实现

本文将在——————

★在一个类中

★在多个类中

★在WPF的多个页面、多个类

              ————————来分析 全局变量、局部变量

(一)★★★★★★★★★★在一个类中分析 全局变量、局部变量的区别★★★★★★★★★★★★★★★★★★★★★

一、先看全局变量

1、静态方法,只能在使用本方法之外的静态变量

2、 静态static的变量,int默认值为 0 ,string 默认值为空

3、静态的Mian必须调用静态 方法

4、静态的变量,作用域在本类,即可以被被其他方法访问、修改,比如 a1

5、静态方法内,不能定义静态变量

6、即使在方法外定义非静态变量,它的作用域也是整个类。

 

二、局部变量

1、局部变量在方法执行完后,释放内存,其他方法不能掉了。比如Main方法不能再访问MethodA()方法的a4了。

2、静态方法中,定义的变量是局部变量,不能被其他方法访问:

3、静态方法只能定义给静态变量

4、非静态方法不能定义静态变量

附录代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace test
{
    class Program
    {
        static int a1;
        static string str1;
        static void Main(string[] args)
        {
            int a2 = 2;
            Console.WriteLine(a1);
            Console.WriteLine(a2);
            string str2 = "字符串2";
            Console.WriteLine(str1);
            Console.WriteLine(str2);
            MethodA();
            Console.WriteLine(a4);
            //static a3 = 33;
            Console.ReadLine(); 
        }
        static public void MethodA()
        {
            a1 = 3;
            //a2 = 22;
            static int a3 = 3;
            int a4 = 4;
            Console.WriteLine(a4);
            Console.WriteLine(a1);
        }
    }
}

(二)★★★★★★★★★★在多类中分析 全局变量、局部变量★★★★★★★★★★★★★★★★★★★★★

1、一个类不能直接访问,另一个类的静态变量。即使设置了静态类也不行。

你只能通过属性设置的方式类访问,但必须进行实例化

对a1进行赋值,令其改变:

2、类内定义的变量,作用域在本类中,比如a2默认作用域在ClassA类中。

3、当我们运行某个类时,其他类的变量是不存在的(不管ClassA是静态变量还是非静态变量)

4、那么好了,我想要设置一个全局变量,它可以作用域所有的Class中,那怎么办呢?

解决版本:在某个类中,设置静态变量、属性,其他类通过new的方式,可以访问它:

但是你要注意一点:一般不设置静态属性。如果你非要那么做,那也可以通过以下设置,实现上图等价的效果:

但是,必须在方法内对其他类的属性进行修改:

5、最后,我们探讨静态类。其实,我的目的很简单。在WPF工程里面,我们往往需要在一个.cs类的一个方法中,以及在另个类.cs的某个方法中,都对主线程的一些类的实例化进行修改、赋值等等,比如修改文本的值。

      那么如何修改,才能额保证只有一份类的实例化,即全局变量呢?把类A设置成静态类即可,,通过属性的设置,其他类都可以访问它、并修改它。

Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace test
{
    static class Program
    {
        static int a3 = 3;
        static public int A3
        {
            get { return a3; }
            set { a3 = value; }
        }
        static void Main(string[] args)
        {
            
            Console.WriteLine(StaticClassA.A1);
            Console.WriteLine(StaticClassA.A2);
            Console.WriteLine(A3);
            ClassB classB = new ClassB();
            classB.methodB();//修改A1
            Console.WriteLine(StaticClassA.A1);
         

            Console.WriteLine(A3); ;//修改后的A3

        }
    }
}

StaticClassA.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace test
{
    static class StaticClassA
    {
        static int a1 = 1;
        static public int A1
        {
            get { return a1; }
            set { a1 = value; }
        }

        static int a2 = 2;
        static public int A2
        {
            get { return a2; }
            set { a2 = value; }
        }
    }
}

Class.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using test;
namespace test
{
    class ClassB
    {

        public void methodB()
        {
            StaticClassA.A1 = 11;
            Program.A3 = 33;
            //Console.WriteLine(StaticClassA.A1);
        }
    }
}

附录

program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace test
{
    class Program
    {
        static int a1=1;
        static public int A1
        {
            get { return a1; }
            set { a1 = value; }
        }
        static void Main(string[] args)
        {
            Console.WriteLine(a1);
            ClassA classA = new ClassA();
            classA.MethodA(); 
            Console.WriteLine(a1);//a1已经改变
            Console.ReadLine(); 
        }

    }
}

ClassA.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace test
{
    class ClassA
    {
        static int a2 = 3;
        public void MethodA()
        {
            //Program program = new Program();
            //program.A1 = 11;
        
            Console.WriteLine(Program.A1=11);
        }
    }
}

(三)★★★★★★★★★★在WPF中分析 全局变量、局部变量的区别★★★★★★★★★★★★★★★★★★★★★

1、你必须new后,才能赋值。

窗口:

 

大总结:

一、类内:

1、类内定义的任何变量,作用域都在本类而已。

2、方法内变量的作用域,只在方法中。即称为局部变量

3、无论是在方法内或方法外,定义的静态变量,作用域都在本类。即称为全局变量。

4、方法外,定义的非静态变量,作用域都在本类。即称为全局变量。

二、多个类之间

1、一个类访问另一个类的变量或方法,往往通过属性的方式来访问。

2、

三、WPF 

1、 控件的Text 、content等是全局变量。重复使用,记得要清零后使用(或者说清零后再赋值)

2、其他的话,和多个类之间,一样。

  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我爱AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值