C#中静态⽅法与⾮静态⽅法(static),公有与私有
(public,private)
梳理公有与私有,静态与⾮静态的应⽤
1)公有与私有
public(公有的):声明的⽅法和属性,可以被外部调⽤.
private(私有的):声明的⽅法和属性,只能在本类中被调⽤,外部看不到.
2)静态与⾮静态
static(静态的):声明的⽅法和属性,不需要实例化就能被调⽤(公有/私有).
C#静态⽅法与⾮静态⽅法⽐较
⼀、C#静态成员
1、静态成员属于类所有,⾮静态成员属于类的实例所有。
2、每创建⼀个类的实例,都会在内存中为⾮静态成员新分配⼀块存储;
⼆、C#静态⽅法
1、C#静态⽅法属于类所有,类实例化前即可使⽤。
2、⾮静态⽅法可以访问类中的任何成员,静态⽅法只能访问类中的静态成员。
3、因为静态⽅法在类实例化前就可以使⽤,⽽类中的⾮静态变量必须在实例化之后才能分配内存,
C#静态⽅法调⽤时⽆法判断⾮静态变量使⽤的内存地址。所以⽆法使⽤。
⽽静态变量的地址对类来说是固定的,故可以使⽤。
三、
C#静态⽅法是⼀种特殊的成员⽅法它不属于类的某⼀个具体的实例,⽽是属于类本⾝。
所以对静态⽅法不需要⾸先创建⼀个类的实例,⽽是采⽤类名.静态⽅法的格式。
1.static⽅法是类中的⼀个成员⽅法,属于整个类,即不⽤创建任何对象也可以直接调⽤!
static内部只能出现static变量和其他static⽅法!⽽且static⽅法中还不能使⽤this…等关键字…因为它是属于整个类!
2.静态⽅法效率上要⽐实例化⾼,静态⽅法的缺点是不⾃动进⾏销毁,⽽实例化的则可以做销毁。
3.静态⽅法和静态变量创建后始终使⽤同⼀块内存,⽽使⽤实例的⽅式会创建多个内存.
4.C#中的⽅法有两种:实例⽅法,静态⽅法.
静态⽅法销毁:主进程销毁时,内存中分配的静态⽅法销毁.
四、获取类的名称
C#静态⽅法中获取类的名称
静态⽅法中⽤:
记住我string className = System.Reflection.MethodBase.GetCurrentMethod().ReflectedType.FullName;
⾮静态⽅法中还可以⽤:
string className = this.GetType().FullName;