C#中静态的深入理解
发布时间:2023-10-18 01:28:27
标签:C#,静态
一、静态成员
1、通过static关键字修饰,是属于类,实例成员属于对象,在这个类第一次加载的时候,这个类下面的所有静态成员会被加载。
2、静态成员只被创建一次,所以静态成员只有一份,实例成员有多少个对象,就有多少份。
3、类加载的时候,所有的静态成员就会被创建在“静态存储区”里面,一旦创建直到程序退出,才会被回收。
注:Person p;//这样实际上就已经被加载了。
4、变量需要被共享的时候,方法需要被反复调用的时候,就可以把这些成员定义为静态成员。
5、在静态方法中,不能直接调用实例成员,因为静态方法被调用的时候,对象还有可能不存在。
6、this/base 关键字在静态方法中不能使用,因为有可能对象还不存在。
7、可以创建这个类的对象,制定对象的成员在静态方法中操作。
8、在实例方法中,可以调用静态成员,因为这个时候静态成员肯定存在。
二、静态成员和实例成员的区别
1、生命周期不一样。
2、在内存中存储的位置不一样。
三、静态类
1、被static关键字修饰的类。
2、静态类里面只能声明静态成员。
3、静态类的本质,是一个抽象的密封类,所以不能被继承,也不能被实例化。
4、如果一个类下面的所有成员,都需要被共享,那么可以把这个类定义为静态类。
四、静态构造函数
1、这个类的成员,第一次被访问之前,就会执行静态构造函数。
2、静态构造函数只被执行一次。
Eg:
class Program
{
public static int i =0;
public Program()
{
i = 1;
Console.Write("实例构造方法被调用");
}
static Program()
{
i = 2;
Console.Write("静态构造函数被执行");
}
static void Main(string[] args)
{
Console.Write(Program.i);//结果为2,首先,类被加载,所有的静态成员被创建在静态存储区,i=0,接着调用了类的成员,这时候静态构造函数就会被调用,i=2
Program p = new Program();
Console.Write(Program.i);//结果为1,实力化后,调用了实例构造函数,i=1,因为静态构造函数只执行一次,所以不会再执行。
}
}


猜你喜欢
- 这是个我在C#调用批处理文件时遇到的问题。首先我通过Process.Start方法调用一个批处理文件,那个批处理文件里面则调用了一大堆程序。
- 本文实例为大家分享了Android仿微信二维码和条形码的具体代码,供大家参考,具体内容如下package your.QRCode.names
- 项目上线之后,如果日志打印的很模糊或者业务逻辑比较复杂,有时候无法定位具体的错误原因,因此可以通过IDEA远程代理进行Debug。线上的代码
- import java.io.BufferedReader; import java.io.IOException;  
- 安装完 Android Studio 后启动,却报错如下:failed to create jvm error code -4这一般应是内存
- 一、Stream流介绍在JDK8时,JAVA新增了lambda表达式,它与 java.io 包里的 InputStream和 OutputS
- java代理有jdk * 、cglib代理,这里只说下jdk * ,jdk * 主要使用的是java反射机制(既java.lang.r
- Android短信验证码功能,供大家参考,具体内容如下1、参考资料Mob网站:http://www.mob.com/Mob在Github上的
- 1.实现阴影或模糊边效果方式:2.通过shape来实现,具体是通过layer-list 多层叠放的方式实现的<?xml version
- 本文实例为大家分享了C语言实现稀疏矩阵的具体代码,供大家参考,具体内容如下#include "stdio.h"#defi
- 一、什么是iText?在企业的信息系统中,报表处理一直占比较重要的作用,iText是一种生成PDF报表的Java组件。通过在服务器端使用Js
- 静态变量初始化顺序1.简单规则首先先看一段最普遍的JAVA代码:public class Test{ public static Test1
- 1.Java进程的创建 Java提供了两种方法用来启动进程或其它程序: (1)使用Runtime的exec()方法 (2)使用Process
- 本文实例讲述了Android开发之FloatingActionButton悬浮按钮基本使用、字体、颜色用法。分享给大家供大家参考,具体如下:
- mybatis-plus作为mybatis的增强工具,简化了开发中的数据库操作。一旦遇到left join或right join的左右连接,
- 由于项目需要,需要用vs窗体程序实现播放视频的窗口的全屏和取消全屏。具体实现界面如图:这是初始状态,视频框的右上角就是控制全屏的按钮这是全屏
- 当初学的是通信专业,毕业以后,同学们各奔东西,去追逐自己的梦想,奔波于大大小小的工地之间。哈哈,开个玩笑,也有厉害的,进了某某研究所,嗯?他
- 初学java,单个的接触有点迷糊,所以总结下他们的关系一、关系Collection--List:以特定顺序存储--ArrayList、Lin
- cookie和session的比较一、对于cookie:①cookie是创建于服务器端②cookie保存在浏览器端③cookie的生命周期可
- 悬浮窗在安卓中实现起来还是比较容易的,这几天在网上温习了相关资料,运行在我安卓6.0手机上才发现,原来在6.0手机上不是行的。第一反应肯定是