将不确定变为确定~static被翻译成静态,你是否赞同
C#中有一个修饰符,它叫static,国人把它叫静态化的,它可以去修饰类,方法,属性,事件等元素。
在100%的教科书中把static叫做静态的,对于原本就很抽象的编程语言来说,无疑使它更加抽象化了,啥是静态,静止不动?有点意思。
先看一个static的应用场合代码片断:
一 静态类:它在程序初始化时自动被执行
1 public static class ConnectionFactory 2 {...}
二 静态方法和静态属性:它在类被第一次使用或第一次被实例化时,被执行
1 public static string Conn=WebConfig.SQLConn; 2 public static DataContext Instance() 3 {...}
三 静态事件,它与静态属性和方法一样的执行机制
1 public static event StartEventHandler Start;
事实上,以上三点是书本上经常介绍的,但我不认为它是一种学习static的最好方式,看一下我对static的理解:
它是类本身的东西,与实例无关,即类的属性,类的方法,类的事件等等,它与实例无关,也就是实例A与实例B,对于public static修饰符下的属性,方法,事件是平等的,同时也是共享的。
如果在一个类型B中对StaticA类中的静态属性Num赋值,它会对所有类中使用Num属性的位置进行修改(事实上,在内在中,它只是一个地址),你的代码可能是这样:
1 /// <summary> 2 /// 测试类 3 /// </summary> 4 public class StaticA 5 { 6 /// <summary> 7 /// 静态属性 8 /// </summary> 9 public static string Num = "类的属性"; 10 }
在其它类中,有对Num属性的使用:
1 public class A 2 { 3 public string ANum = StaticA.Num; 4 } 5 public class B 6 { 7 public string BNum = StaticA.Num; 8 }
而当我们在程序的任何一处修改Num的值时,以上A和B中的实例属性ANum和BNum也就会发生变化了,呵呵。
看一下,由static实现的单件模式吧(类只能有一个实例)
1 public sealed class Singleton 2 { 3 // 静态,易变的对象 4 private static volatile Singleton instance = null; 5 // Lock对象,线程安全所用 6 private static object syncRoot = new Object(); 7 8 private Singleton() { } 9 10 public static Singleton Instance 11 { 12 get 13 { 14 if (instance == null) 15 { 16 lock (syncRoot) 17 { 18 if (instance == null) 19 instance = new Singleton(); 20 } 21 } 22 23 return instance; 24 } 25 } 26 }
总结一下static的技术要点:
1 static与具体实例无法,属性类本身的东西,而不加static是与当前实例(new ())有关的个性化对象
2 static叫它静态对象不如叫它全局对象或类自身对象
3 static有时可以提高系统性能,即,在为对象开辟一块内存空间
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2011-06-09 不忘本~委托和事件(续)
2011-06-09 不忘本~委托与事件