一、静态成员

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 =;
public Program()
{
i = ;
Console.Write("实例构造方法被调用");
}
static Program()
{
i = ;
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#中的“静态”的更多相关文章

  1. C++中关于[]静态数组和new分配的动态数组的区别分析

    这篇文章主要介绍了C++中关于[]静态数组和new分配的动态数组的区别分析,很重要的概念,需要的朋友可以参考下 本文以实例分析了C++语言中关于[]静态数组和new分配的动态数组的区别,可以帮助大家加 ...

  2. 深入理解JDK中的I/O

    深入理解JDK中的I/O 目 录 java内存模型GCHTTP协议事务隔离级并发多线程设计模式清楚redis.memcache并且知道区别mysql分表分库有接口幂等性了解jdk8稍微了解一下特性 j ...

  3. 简单理解Struts2中拦截器与过滤器的区别及执行顺序

    简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...

  4. php面向对象中static静态属性和静态方法的调用

    这篇文章主要介绍了php面向对象中static静态属性和静态方法的调用,实例分析了static静态属性和静态方法的原理与调用技巧,需要的朋友可以参考下 本文实例讲述了php中static静态属性和静态 ...

  5. 理解Java中的final和static关键字

    回顾这两个关键字前,先考虑一个问题: Static变量存储在JVM中的位置,或者说static变量是如何被加载的? JVM会把类的静态方法和静态变量在类加载的过程中读入方法区(Method Area) ...

  6. 转: 理解AngularJS中的依赖注入

    理解AngularJS中的依赖注入 AngularJS中的依赖注入非常的有用,它同时也是我们能够轻松对组件进行测试的关键所在.在本文中我们将会解释AngularJS依赖注入系统是如何运行的. Prov ...

  7. C++ : 从栈和堆来理解C#中的值类型和引用类型

    C++中并没有值类型和引用类型之说,标准变量或者自定义对象的存取默认是没有区别的.但如果深入地来看,就要了解C++中,管理数据的两大内存区域:栈和堆. 栈(stack)是类似于一个先进后出的抽屉.它的 ...

  8. 理解AngularJS中的依赖注入

    点击查看AngularJS系列目录 理解AngularJS中的依赖注入 AngularJS中的依赖注入非常的有用,它同时也是我们能够轻松对组件进行测试的关键所在.在本文中我们将会解释AngularJS ...

  9. 理解Vue中的Render渲染函数

    理解Vue中的Render渲染函数 VUE一般使用template来创建HTML,然后在有的时候,我们需要使用javascript来创建html,这时候我们需要使用render函数.比如如下我想要实现 ...

随机推荐

  1. 【转】为Xcode添加删除行、复制行快捷键

    原文网址:http://www.jianshu.com/p/cc6e13365b7e 在使用eclipse过程中,特喜欢删除一行和复制一行的的快捷键.而恰巧Xcode不支持这两个快捷键,再一次的恰巧让 ...

  2. NameValueCollection类

    最近在研究HttpRequest类,发现里面的很多属性都返回一个NameValueCollection对象,今天再来了解一下这个神秘的对象. 随便写了个例子,发现跟HashTable类似.但是这个东西 ...

  3. POJ 3169 Layout 差分约束系统

    介绍下差分约束系统:就是多个2未知数不等式形如(a-b<=k)的形式 问你有没有解,或者求两个未知数的最大差或者最小差 转化为最短路(或最长路) 1:求最小差的时候,不等式转化为b-a>= ...

  4. 卸载安装失败的sqlserver2008 R2

    安装sqlserver2008失败,无法正常卸载. 从  计算机  控制面板 卸载时有如图弹窗 并且在  控制面板  中找不到如图的各种插件. 百般无奈之后,发现下载安装windows install ...

  5. Entity Framework Linq 简单笔记

    类型查询 public class bbb:xxx {} var items = from c in context.Dbset<xxx>    where c is bbb   sele ...

  6. Loadrunner执行Java脚本

    1. Eclipse中调试Java脚本,脚本调试通过后,打成jar包: 2. 新建lr脚本,选择Java vuser协议: 3. Run-time Settings中Classpath设置jar包,没 ...

  7. bzoj 3033 太鼓达人

    思路:首先一定是2^m次方的总数.用二进制从 000 一直到 111总过m个数,然后暴搜. #include<cstdio> #include<cstring> #includ ...

  8. 关于Windows Azure的常见问题-一般问题FAQ

    一般问题 什么是Windows Azure? Windows Azure 是一个灵活而开放的云平台,通过该平台,您可以在数据中心快速生成.部署和管理应用程序.Windows Azure 支持所有主流操 ...

  9. Bzoj 1565: [NOI2009]植物大战僵尸 最大权闭合图,拓扑排序

    题目: http://cojs.tk/cogs/problem/problem.php?pid=410 410. [NOI2009] 植物大战僵尸 ★★★   输入文件:pvz.in   输出文件:p ...

  10. 用 ggplot2 在同一个图上画多条颜色不同的线

    假如数据格式是这样: day    邓文迪    微博    城管0    0.0    9.262970888519191E-4    0.01    0.0    0.00144775855013 ...