将不确定变为确定~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被翻译成静态,你是否赞同,如需转载请自行联系原博主。

时间: 2024-09-28 18:01:54

将不确定变为确定~static被翻译成静态,你是否赞同的相关文章

php-注释一段PHP代码,能翻译成C#最好

问题描述 注释一段PHP代码,能翻译成C#最好 10C function pinyin($s $isfirst = false) { static $pinyins; $s = trim($s); $len = strlen($s); if($len < 3) return $s; if(!isset($pinyins)) { $data = '一:yi|丁:ding|丂:kao|七:qi|丄:shang|丅:xia|丆:mu|万:wan|丈:zhang|三:san|上:shang|下:xia|

请高手帮忙把以下JAVA代码翻译成PHP,100分全给你了

问题描述 以下JAVA代码是一个解密算法,请哪位高手帮下忙把以下JAVA类的代码翻译成PHP的类,非常感谢.importjava.io.IOException;importjava.io.UnsupportedEncodingException;importjava.net.URLDecoder;importjava.net.URLEncoder;importjava.security.InvalidAlgorithmParameterException;importjava.security.

如何这段C#代码翻译成VB代码?谢谢!

问题描述 如何这段C#代码翻译成VB代码?谢谢! private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { //自动点击弹出确认或弹出提示 IHTMLDocument2 vDocument = (IHTMLDocument2)webBrowser1.Document.DomDocument; vDocument.parentWindow.execScrip

vb net-请帮我把下面的C#翻译成vb.net,实在看不懂,谢谢

问题描述 请帮我把下面的C#翻译成vb.net,实在看不懂,谢谢 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Sockets; using System.IO; namespace SyncChatServer { class User { public TcpClient client { get; private set; } pu

win8系统如何将英文网页翻译成中文网页

  win8系统如何将英文网页翻译成中文网页 1.首先双击桌面浏览器图标打开百度浏览器; 2.接下来单击应用中心图标,打开百度浏览器应用中心; 3.打开百度浏览器应用中心后,单击百度翻译pro; 4.弹出百度翻译pro对话窗口后,单击 安装然后确定安装; 5.安装完成后会在插件栏出现一个百度翻译pro的图标; 6.我们打开一个英文网站的首页,进入后可以发现百度翻译pro把英文网页自动翻译成中文网页了. windows7教程 windows8教程 windows10教程

wps文档中怎么将中文翻译成英文

  我们在办公或者学习的时候经常会使用到wPS,有些时候由于特殊的需要我们要把中文翻译成其他语言,那么我们可不可以直接使用wps进行翻译而不通过其他翻译软件呢,那么下面小编就教大家wps文档将中文翻译成目标语言的方法. 1.打开待翻译的内容 2.找到工具栏 审阅--翻译 3.点击"翻译"按钮,选择原始语言及目标语言 4.选中需要翻译的文字 5.点击"翻译" 这样您就可以自己使用wps进行翻译了哦,当然如果有部分小错误您可以进行手动修改哦,希望对大家有用.

Win8浏览器如何将英文网页翻译成中文网页

  我们在使用Win8系统时,如果浏览网页过程中碰到英文网站,应该很多用户对英文来说都会感到头疼,在看不懂的情况下,如果使用英文翻译软件一句一句的翻译,那么就显得非常的麻烦.对于这样的问题有什么办法能够将英文网页翻译成中文呢?这里就让安下小编来为大家介绍下,使用浏览器应用百度翻译pro一键将英文网页翻译成中文网页的具体操作方法. 具体方法如下: 1.首先双击桌面浏览器图标打开百度浏览器; 2.接下来单击应用中心图标,打开百度浏览器应用中心; 3.打开百度浏览器应用中心后,单击百度翻译pro; 4

fortran-一段matlab的代码翻译成java的

问题描述 一段matlab的代码翻译成java的 def find_all_paths(graph, start, end, path=): path = path + if start == end: return if not graph.has_key(start): return paths = for node in graph: if node not in path: newpaths = find_all_paths(graph, node, end, path) for new

java翻译成C#?????

问题描述 publicvoiddoUploadFile()throwsException{Stringjkxlh="791F0909030617040815E6958E9DFF8FFC9E39343238575840746D72692E636E";Stringxtlb="01";Stringjkid="01C86";Stringxh="14";Stringhpzl="02";Stringhphm=URLEn