C# static

本文,在大文豪的static与C#中的static随笔基础上修改,增加了几个关键知识点

1、static 关键字简介

static是C#中经常使用的关键字之一,这个关键字常用于方法、字段、属性、事件、构造函数、类中,不能用于常量、索引器、析构函数,使用static关键字,必须知道下面几个知识点:

(1)、静态方法的调用与非静态方法的调用方式

a、静态方法调用方式:类名.静态方法名

b、非静态方法调用方式:new 类().非静态方法

静态方法是属于类的,非静态方法是属于类实例(对象)的。

(2)、内存的初始化

a、静态成员是在第一次使用时初始化,非静态成员是在创建成员的时候厨初始化

b、静态构造函数只能被执行一次;非静态的构造函数可以根据需要进行多次使用。

它们最主要的区别是:静态成员成员在第一次初始化后,就给静态成员在内存中分配了地址,且这个地址只有一份,故static可以直接访问,而非静态成员必需手工去实例化该类,以对象的方式去访问变量和方法。

(3)、静态成员的释放

a、静态成员一旦创建则在全局区一直存在,直到应用程序结束。

b、非静态成员则是由new关键字在堆中创建,可以有多个副本,其释放由GC(垃圾自动回收)完成。

(4)、静态类

a、非静态类中可以包含静态成员,但是静态类中必须全都都是静态成员,不能有非静态成员存在

b、静态类无法实例化,所以不能有非静态构造函数,但是可以有静态构造函数,给静态成员初始化用。

(5)、静态构造函数

a、静态构造函数既没有访问修饰符,也没有参数。因为是.NET调用的,所以像public和private等修饰符就没有意义了。

b、静态构造函数可以不能带有任何参数,但是非静态构造函数可以带有各种参数

c、是在创建第一个类实例或任何静态成员被引用时,.NET将自动调用静态构造函数来初始化类,也就是说我们无法直接调用静态构造函数,也就无法控制什么时候执行静态构造函数了。

d、一个类只能有一个静态构造函数

e、无参数的构造函数可以与静态构造函数共存。尽管参数列表相同,但一个属于类,一个属于实例,所以不会冲突。

f、最多只运行一次。

g、静态构造函数不可以被继承。

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

i、静态构造函数中不能有非静态成员,因为

造成i的原因是:

在一个静态方法或者是静态构造函数中方法使用非静态成员,因为static类型是属于这个类本身的,在类被调用的时候,static类型就已经生成,而非static成员还没有生成,他不属于这个类的本身,而是属于这个类的对象,所以在没有实例化对象之前,是找不到非静态成员的,所以在静态方法或者构造函数中使用非静态成员必须这样:new 类名().非静态成员=值;

j、静态构造函数是最早被调用的,只要有静态访问,那就先调用静态构造函数,在调用非静态构造函数

k、最重要的一点:静态构造函数的主要作用有两个:i、初始化静态成员属性 ii、做为单例模式(Sington(单例模式))创建对象的唯一入口

2、static的使用场合

a、需要保存全局都有效的数据, 如:当前已登录用户信息、系统配置信息、系统设置 b、因为效率相对更高,所以需要快速访问的 c、使用频率非常高的

3、static不能使用过多,应为太多会消耗系统的内存,增加系统的负担

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏老司机的技术博客

人人都能学会的python编程教程5:循环-2

比如我们要从一个列表中找到某个特定元素,那么只要找到了这次循环就可以停止了,没有必要非得走到最后。

4308
来自专栏Astropeak

Python 描述符是什么?以及如何实现

1713
来自专栏海天一树

小朋友学经典算法(12):分割字符串

在分割字符串之前,先来了解一些跟字符串相关的变量或函数: (1)size_type:size_type由string类类型和vector类类型定义的类型,用以保...

1232
来自专栏鸿的学习笔记

随便写写python的特殊方法

还有__bool__,__abs__,__eq__,__str__进行重载,记得要注意在文档中说明

741
来自专栏企鹅号快讯

宝宝都能学会的python编程教程5:循环-2

“死循环”是必须要避免的,当然“活循环”也未必都要执行完。 break 语句 比如我们要从一个列表中找到某个特定元素,那么只要找到了这次循环就可以停止了,没有必...

2117
来自专栏抠抠空间

函数 (二) 名称空间与作用域

一、什么是名称空间 我们写一段代码,里面肯定会定义一些变量名,函数名,而一旦我们运行代码,python解释器在加载这些代码的时候,会在内存中开辟一片空间专门用来...

34610
来自专栏谈补锅

C语言之字符、整数、数组、字符串笔记

每种类型占用内存空间不一样,比如char占一个字节,short占2个字节,int占4个字节,double占8个字节

6403
来自专栏前端之路

字符串、数组处理方法总结

1163
来自专栏null的专栏

C/C++——vector的基本操作总结

标准库vector类型是C++中使用较多的一种类模板,vector类型相当于一种动态的容器,在vector中主要有一些基本的操作,接下来分别从以下的几个方面总结...

3353
来自专栏Bug生活2048

Python自学之路-内置函数说明及实例(三)

filter函数用于过滤序列。过滤的方式则是采用传入的函数,去循环序列的元素调用,如果函数计算的结果为True则保留元素,否则将舍弃该元素。

1253

扫码关注云+社区

领取腾讯云代金券