本文将在——————
★在一个类中
★在多个类中
★在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、其他的话,和多个类之间,一样。