温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

写给初学者之 访问控制符static

发布时间:2020-08-09 17:02:20 来源:网络 阅读:621 作者:咸咸的简单 栏目:编程语言

C#的修饰符:static

声明属于类型本生而不属于实体对象的成员。

一、非静态类

1、非静态类可以包含静态的方法、字段、属性或事件。 静态的类成员属于类级别的,不属于类的任何实例,类外不可以通过类的实体对象来调用静态变量,要用类名来调用,(如现在有一个Student 类,这个类里有一个static  string  name,当其他类需要调它的时候就要用Student.name);无论对一个类创建多少个实例,它的静态成员都只有一个副本,类里的所有成员都可以访问它,可以改变它的值。 静态方法和属性不能访问其包含类型中的非静态字段和事件,并且不能访问任何对象的实例变量(除非在方法参数中显式传递)。

静态字段有两个常见的用法:一是记录已实例化对象的个数;二是存储必须在所有实例之间共享的值。

静态方法可以被重载但不能被重写,因为它们属于类,不属于类的任何实例

2、静态成员在第一次被访问之前并且在调用静态构造函数(如有存在)之前进行初始化。  静态构造函数用于初始化任何 静态 数据,或用于执行仅需执行一次的特定操作。 在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数。

public class Students

{

//定义静态变量

public staic int Num;

//静态构造函数

static Students()

{

Num = 30;

}

}

3、静态构造函数具有以下特点: 

静态构造函数既没有访问修饰符,也没有参数。用于对静态字段、只读字段等的初始化。 

在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类的静态构造函数在给定应用程序域中至多执行一次

静态构造函数是不可继承的,而且不能被直接调用。

在程序中,用户无法控制何时执行静态构造函数。

如果没有编写静态构造函数,而这时类中包含带有初始值设定的静态字段,那么编译器会自动生成默认的静态构造函数。

4、静态变量的几点说明

1静态方法和静态数据成员相当于共享变量,只有“一份”,为该类的所有对象所共有,因而在需要共享数据时,定义这种类型时很好的选择。 一但定义一个类后(不一定要实例化对象)该类的所有静态成员就载入内存(并不是程序启动,就装入内存,没有定义该类时它不会载入内存) 静态成员的作用域与它所属的类的作用域相同

(2)方法内部的静态变量,执行完静态变量值不消失,再次执行此对象的方法时,值仍存在,它不是在栈中分配的,是在静态区分析的,共有两种变量存储在静态存储区:全局变量和static变量这是与局部变量最大的区别。

3由于静态成员函数存在于类一级,并且不是对象的一部分,因此没有 this 指针。在静态方法中引用 this 是错误的

二、静态类:

声明为static,它仅包含静态成员,不能用new静态类的实例。使用静态类来包含不与特定对象关联的方法。

功能:仅包含静态成员,不能被实例化,是密封的,不能包含实例构造函数,可包含静态构造函数以分配初始值或设置某个静态变量。

优点:编译器能够执行检查以确保不致偶然地添加势力成员。编译器将保证不会创建此类的实例。 

 

 

 

 

 

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI