在Java笔记中已经有关于静态的说明,C#学习中,再次记录下。
同一静态变量或方法,共享内存,共用同一块内存区域。其值会被多个对象改变。
可以理解为,盒子中只有一个苹果,张三咬了一口,李四从此盒子中拿取苹果时,是被咬过的苹果。
同一命名空间下的所有类都可以使用或改变全局静态变量,它只保留最新值。如在类GlobalVariable中定义了public static string Result,那么在其他类中可以GlobalVariable.Result="最新值",或使用GlobalVariable.Result。
静态变量先按顺序分配内存,全部分配完后,再按顺序赋值。(两轮)
分配内存时:整型数据默认值为0,单精度数据为0.0f,双精度数据为0.0,布尔型数据为False,引用型数据string为null。
new类的对象时,这个类内的所有变量都已赋值完毕。
class class1 { static int i = getNum(); int j = getNum(); static int num = 1; static int getNum() { return num; } static void Main(string[] args) //静态方法中,可以直接用静态变量,或对象.非静态变量。 { Console.WriteLine("i={0}",i); //静态变量 Console.WriteLine("j={0}", new class1().j); //对象.非静态变量 Console.Read(); } }
以上代码过程如下:
1、静态变量由上到下先初始化,i,num都为0,静态方法getNum返回的num=0。
2、静态变量由上到下赋值,i等于getNum方法的返回值0,num=1,静态方法getNum返回的num=1
3、new class1()后,class1中的量,都已赋值完毕。即此时j=1
所以最终,i=0,j=1
【实例】静态方法只能被创建一次(内存唯一),非静态方法可被多次创建。
namespace ConsoleApplication1 { class Program { static Program() //构造方法 { Console.WriteLine("静态方法"); } private Program() //构造方法 { Console.WriteLine("非静态方法"); } static void Main(string[] args) { Program p1 = new Program() ; Program p2 = new Program(); Program p3 = new Program(); } } }
关于构造方法:方法名与类名相同的方法被称作构造方法。
特点如下:
1、没有返回类型,甚至连void也没有。
2、构造方法的调用是在创建一个对象时使用new操作进行的。构造方法的作用是初始化对象。
3、构造方法在创建对象时自动执行,一般不能显式地直接调用。
4、每个类可以有零个或多个构造方法。
5、不能被static、final、synchronized、abstract和native修饰。构造方法不能被子类继承。
【参考】