【Unity05】C#static类及其使⽤⽅法
PS:本系列笔记将会记录我此次在北京学习Unity开发的总体过程,⽅便后期写总结,笔记为⽇更。
笔记内容均为 ⾃⼰理解,不保证每个都对。
C#笔记未按照难度排列
Part 1 静态类:
静态类与⾮静态类的区别在于不能被实例化,就是不能使⽤new。
举个例⼦:
⼀个公司(类),下⾯有很多个员⼯(new 的实例) ,每个员⼯都有⾃⼰的电脑(成员变量),公司有⾷堂(static)。
使⽤时必须指出 所有者 例如 “职员A.电脑” 表⽰ 职员A的电脑,对于⾷堂(static)⽽⾔,他是属于整个公司的,⽽不是属于特定的某个实例 ,使⽤时 只能表⽰为 公司.⾷堂。
1、静态类的主要特性:
1. 仅包含静态成员。
2. 不能被实例化。
3. 本质是⼀个抽象的密封类,不能被继承。
4. 不能包含实例构造函数。
5. 如果⼀个类下⾯的所有成员都要被共享,那么可以把类定义为静态类。
Part 2 静态成员:
1、主要特性:
1. 通过static关键字修饰,是属于类,实例成员属于对象,在这个类第⼀次加载的时候,这个类下⾯的所有静态成员会被加载
2. 静态成员只被创建⼀次,所以静态成员只有⼀份,实例成员有多少个对象,就有多少份。
3. 类加载的时候,所有的静态成员就会被创建在“静态存储区”⾥⾯,⼀旦创建直到程序退出,才会被回收。
4. 在静态⽅法中,不能直接调⽤实例成员,因为静态⽅法被调⽤的时候,对象还有可能不存在。
5. this/base 关键字在静态⽅法中不能使⽤,因为有可能对象还不存在
6. 在实例⽅法中,可以调⽤静态成员,因为这个时候静态成员肯定存在。
7. 可以创建这个类的对象,制定对象的成员在静态⽅法中操作。
8. ⽆论对⼀个类创建多少个实例,它的静态成员都只有⼀个副本。
9. 静态⽅法和属性不能访问其包含类型中的⾮静态字段和事件,并且不能访问任何对象的实例成员。
10. 静态⽅法只能被重载,⽽不能被重写,因为静态⽅法不属于类的实例成员。
Part 3 静态构造函数:
定义的类:
class Static_Test
{
public static int static_Tag = 0; //Flag
public int notStatic_TAG = 0;
public static int static_Count = 0; //记录静态构造⽅法的调⽤次数
public Static_Test()
{
static_Tag = 1; //静态⽅法可以访问静态变量
Console.WriteLine("实例构造⽅法被引⽤");
} //⽆参构造⽅法
static Static_Test() //静态构造⽅法
{
static_Tag = 2;
//notStatic_TAG = 5;静态⽅法不能访问成员变量
static_Count ++; //存储调⽤次数
Console.WriteLine("静态构造⽅法被引⽤");
}
public Static_Test(int tmpTag) //带参构造⽅法
{
static_Tag = 3;
//成员⽅法可以访问静态变量
//静态成员不能⽤this
Console.WriteLine("带参构造⽅法被引⽤");
writeline方法属于类}
~Static_Test() //析构函数作⽤释放空间
{
Console.WriteLine("析构函数被调⽤");
}
}
Main函数:
static void Main(string[] args)
{
Console.WriteLine("i = {0} ", i); //输出结果 i = 0
//类Progarm第⼀次加载的时候,会对所有的static对象进⾏分配内存空间
//遵守由上⾄下的顺序
//⾸先对 static int i 进⾏分配空间, 分配后赋予初始值 0
//其次对 static int Num 进⾏分配空间,分配后赋予初始值 0
//随后进⾏ i = getNum()赋值操作,此时 Num = 0, 所以 i = 0
Console.WriteLine(Static_Test.static_Tag);
/*输出结果为2,函数开始所有的静态成员被创建放在静态存储区当中,static_Tag = 0
*随后函数开始调⽤类的成员变量,调⽤时类的静态构造⽅法被使⽤访问 static_Tag = 2
*/
Static_Test s_T = new Static_Test();
Console.WriteLine(Static_Test.static_Tag);
/*输出结果为1,类实例化时会调⽤类的实例化函数,因为是⽆参,所以 static_Tag = 1,
*因为静态构造函数只有在类第⼀次创建时才会被调⽤,所以输出结果为 static_Tag = 1
*/
s_T = new Static_Test(5);
Console.WriteLine(Static_Test.static_Tag);
/*输出结果为3,类实例化时会调⽤类的实例化函数,因为是有参,所以 static_Tag = 3,
*/
Console.WriteLine("静态构造⽅法调⽤次数为 {0} ", Static_Test.static_Count);
/
/输出结果为1 因为静态构造⽅法只能被创建⼀次
Console.ReadLine();
}
Part 4 static静态变量的实例与分析:
定义的类:
static int i = getNum();
int j = getNum();
static int Num = 1;
static int getNum() //获得Num数值
{
return Num;
}
Main函数:
Program program = new Program();
Console.WriteLine("j = {0} ", program.j); //输出结果 j = 1
//进⾏ i = getNum()赋值操作后,进⾏ Num = 1的赋值操作, Num = 1
//随后进⾏ j = getNum()赋值操作,此时Num = 1, 所以 j = 1
第五天收获:了解了static关键字的使⽤⽅法,了解了静态类的特性与构造,以及静态类与⾮静态类的访问关系。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论