C# 基础(二)静态类、静态字段(静态变量)、静态属性、静态方法(静态函数)

【静态类】

  1. 非静态类使用完成后系统会自动销毁释放,所以非静态类相对来说比较安全,而静态类是在程序结束后销毁的,在销毁前一直驻留在内存中,因此出现错误的可能性会大些。静态方法效率上要比实例化高。
  2. 静态类能提高调用的性能,比如DBHelp类和业务逻辑层的类基本上都使用静态类。
  3. 一般工具类库都为静态类。
  4. 大型项目少用静态类,减少占内存。
  5. 经常使用的类型,用静态类。提高加载效率。
  6. 静态类的基本特点:https://q.cnblogs.com/q/17898/

静态类的主要功能如下:

它们仅包含静态成员。

它们不能被实例化。

它们是密封的。

它们不能包含实例构造函数(C# 编程指南)。

       因此创建静态类与创建仅包含静态成员和私有构造函数的类大致一样。私有构造函数阻止类被实例化。

使用静态类的优点在于,编译器能够执行检查以确保不致偶然地添加实例成员。编译器将保证不会创建此类的实利。

静态类是密封的,因此不可被继承。静态类不能包含构造函数,但仍可声明静态构造函数以分配初始值或设置某个静态状态。

7、静态类的成员都是静态的。

 

 

 

【静态字段(变量)】

  1. 静态字段在装载程序集的时候就分配内存空间,而非静态字段要在实例初化时候才分配内存空间。
  2. 当不存在 static 修饰符时,由该声明引入的字段为实例字段(实例变量)。静态字段不属于某个特定的实例;相反,它只标识了一个存储位置。不管创建了多少个类实例,对于关联的应用程序域来说,在任何时候静态字段都只会有一个副本。
  3.  静态字段被类的所以实例共享,所有实例都访问同一内存位置。如果该内存位置的值被一个实例改变了,则这种改变对所有的实例都可见。

   https://i-blog.csdnimg.cn/blog_migrate/6a8338a9793e513f62842f8447eec868.png

【静态属性】

  1. 实例不能访问静态属性,但可以访问静态方法。
  2. 类名可以直接访问类内的静态属性,即 类名.静态属性  有效,不用实例化。若非静态属性,则不能直接访问。见第四章 程序StaticDataAndMembers。
  3. 属性的作用就是保护字段的,对字段的赋值和取值进行限制。属性的本质是由两个方法组成的,get()、set()方法;属性始终不存值,在实际应用中操作属性而不直接操作字段,但实际上最终还是操作了字段(字段被赋值和从字段取值),字段用private修饰,属性一般用public修饰,他们是成对出现的。

 

【静态方法】https://blog.csdn.net/zxcvbnm32123/article/details/9429269

 

  1. 对类(或方法):对类或方法)应用 static 关键字,则该类或方法)的所有成员都必须是静态的。
  2. 静态的方法就在在程序启动的时候,系统自己建立一个该方法的实例在内存里面,不需要我们在手动去实例该方法,可以直接调用(但是类的实例不能访问类的静态方法,因为静态方法本身就是一个实例了,不需要再次实例,直接访问即可)。还有就是该实例会在内存中占一定的内存空间,这个内存空间只要程序不退出就会一直占用,所以在内存比较小的时候尽量少用静态方法。
  3. 如果做invoke 或者是跨线程的处理,还有API的DLLIMPORT最好用静态的。
  4. 非静态方法可以访问类中的任何成员,静态方法只能访问类中的静态成员
  5. .静态方法效率上要比实例化高,静态方法的缺点是不自动进行销毁,而实例化的则可以做销毁。
  6. 静态方法和静态变量创建后始终使用同一块内存,而使用实例的方式会创建多个内存
  7. 静态的不可被继承,它既不能实例化,也就是防止继承。不能使用抽象或虚的方法进行扩展和多态

 

 

 

 

 

C# 中,静态类静态构造函数以及静态变量都是特定类型的成员,它们的行为和常规类有所不同。下面是关于这些概念的简要介绍: 1. **静态类(Static Class)**: - 静态类是一个不能被实例化的类,意味着没有默认的构造函数,所以无法创建它的对象。 - 它通常用来封装一组相关的静态方法属性,因为静态类中的所有成员都是共享的,适用于全局访问。 - 由于静态类不能派生,所以它不能包含非静态成员。 2. **静态构造函数(Static Constructor)**: - 类似于构造函数,但它是为整个静态类准备的,而不是为每个实例。 - 只有一个静态构造函数,当第一次使用该类时会被自动调用。 - 通常用于执行类的初始化操作,如设置常量、配置资源等,但不能直接修改实例变量。 3. **静态变量(Static Variables)**: - 静态变量是在类级别定义的,属于整个类,而不是某个具体的对象。 - 所有对该静态变量的引用都指向同一个内存位置,这意味着无论何时何地,对同一静态变量的读写都会影响到其他地方的程序。 - 需要注意的是,静态字段如果没有显式初始化,其值是不确定的(编译器默认),如果初始化了,通常是类型默认值(如`int`为0,`string`为空字符串)。 **相关问题--:** 1. 静态类和普通类的区别是什么? 2. 静态构造函数何时会自动执行? 3. 如何确保静态变量在整个应用中始终只有一个副本? 4. 在什么时候使用静态变量比实例变量更合适?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我爱AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值