将不确定变为确定~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有时可以提高系统性能,即,在为对象开辟一块内存空间

本文转自博客园张占岭(仓储大叔)的博客,原文链接:将不确定变为确定~static被翻译成静态,你是否赞同,如需转载请自行联系原博主。

目录
相关文章
|
1月前
|
存储 C语言 C++
C/C++静态static属性/用法
C/C++静态static属性/用法
10 0
|
7月前
|
Java
final 类,常量,方法的解释
final 类,常量,方法的解释
54 1
|
8月前
|
Java
深入理解static的作用以及被static修饰的变量、方法、块
static关键字有以下三种使用方法: 1.被static修饰的变量属于静态变量,类变量,可以通过类名,变量名直接引用,不需要进行new一个新类。 2.被static修饰的方法属于静态方法,类方法,可以通过类名,方法名直接引用,而不需要new出来一个对象 3.静态块,用于初始化一个类的时候进行一些操作,静态变量、静态方法和静态代码块都只执行一次,而且只在初始化的时候执行。
199 1
|
9月前
|
C语言
竟然有人如此解释关键字中的static
竟然有人如此解释关键字中的static
37 0
竟然有人如此解释关键字中的static
|
10月前
|
项目管理 C++
VS 程序“***”不包含适合于入口点的静态“Main”方法
VS 程序“***”不包含适合于入口点的静态“Main”方法
131 0
|
10月前
编写一个程序,链接两个字符串字面常量,将结果保存在一个动态分配的char数组中,重写这个程序,连接两个标准string对象
编写一个程序,链接两个字符串字面常量,将结果保存在一个动态分配的char数组中,重写这个程序,连接两个标准string对象
小浩编程:static简单举例应用
小浩编程:static简单举例应用
53 0
|
存储 Java 程序员
深入理解Java中的三个修饰符(抽象(abstract)、静态(static)和最终的,不可变(final))【配视频】
🍅程序员小王的博客:程序员小王的博客 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕 🍅java自学的学习路线:java自学的学习路线
269 0
深入理解Java中的三个修饰符(抽象(abstract)、静态(static)和最终的,不可变(final))【配视频】
|
存储 安全 C++
static与全局与局部变量的区别
extern全局变量、static全局变量和static局部变量的生存期都是“永久”,区别只是可见域不同。extern全局变量可见区域是工程,static全局变量可见区域是文件,而static局部变量的可见区域是块。
|
存储 Java
Java基础:static的理解(含义、用法及静态修饰的优先顺序)
Java基础:static的理解(含义、用法及静态修饰的优先顺序)
142 0
Java基础:static的理解(含义、用法及静态修饰的优先顺序)