国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#類中static變量用法分析

2019-10-29 21:42:50
字體:
供稿:網(wǎng)友
這篇文章主要介紹了C#類中static變量用法,實例分析了static變量使用技巧與相關(guān)注意事項,需要的朋友可以參考下
 

本文實例講述了C#類中static變量用法。分享給大家供大家參考。具體分析如下:

先來看一段代碼:

復(fù)制代碼代碼如下:
using System; 
namespace Param 

class Class1 

static int i = getNum(); 
int j = getNum(); 
static int num = 1; 
static int getNum() 

return num; 

[STAThread] 
static void Main(string[] args) 

Console.WriteLine(string.Format("i={0}",i));

 

Console.WriteLine(string.Format("j={0}",new Class1().j));

Console.Read();



}


上面的代碼是一個網(wǎng)友告訴我的,讓我看看結(jié)果,我看了一眼馬上說結(jié)果是 
i=1 
j=1 
網(wǎng)友運行后說結(jié)果是 
i=0 
j=1 
我嚇了一跳,認真看了代碼,原來自己真的錯了。

 

下面我解釋一下為什么是后一種結(jié)果

對一個類來說,static變量是與對象無關(guān)的,那么它們什么時候被初始化呢?就是在第一次引用的時候。當類生成對象的時候,可以簡單分成3步

1. 為所有static變量分配內(nèi)存,這個時候內(nèi)存里面的值是該變量類型的缺省值。關(guān)于不同值類型的缺省值大家可以去查相關(guān)資料,注意值類型和引用類型是不同的。 
2. 為static變量賦值,同樣要注意值類型和引用類型是不同的。 
3. 生成對象,調(diào)用構(gòu)造函數(shù),先調(diào)用這個類的父類的構(gòu)造函數(shù),然后調(diào)用類本身的構(gòu)造函數(shù),生成對象。

現(xiàn)在分析上面的代碼:

Console.WriteLine(string.Format("i={0}",i));這里i是static變量,而且類class1是第一次被引 用,按照上面說的三步,要先為class1里面所有的static變量分配內(nèi)存。盡管現(xiàn)在有超線程技術(shù),但是指令在邏輯還是一條一條的按順序執(zhí)行的,所以 先為static int i分配內(nèi)存,并且在該內(nèi)存中保持int的缺省值0,接著再為static int num 變量分配內(nèi)存,值當然也為0。

然后執(zhí)行第二步,為變量賦值:先為static int i變量賦值,i=getNum(),看getNum里面的代碼,就是return num,這個時候num的值是0,于是i就為0了。然后對變量num賦值,num=1;這行代碼執(zhí)行后,num就為1了。分析到這里我就不繼續(xù)分析了,大家很容易看出結(jié)果是什么。

稍微熟悉C#的人,只要認真看代碼,肯定不會出錯,但是如果拿來考人,相信很多人會做錯。我認為這個問題簡單得算不上一個技術(shù)問題,所以放在非技術(shù)區(qū)。之所以在上面說那么多廢話來分析,是想說明在編程的時候,即使非常熟悉、非常基本的東西,也要認真。當然如果我手下的人寫出這樣的代碼,肯定在代碼檢視的時候被我痛批。事實上對static值類型變量不直接賦值,而通過方法來賦值,是不常用或者是有點bt的做法,但是我仍然很佩服出題的人。

希望本文所述對大家的C#程序設(shè)計有所幫助。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 博爱县| 平度市| 夏河县| 高唐县| 茌平县| 招远市| 广元市| 石门县| 溧水县| 宁安市| 红桥区| 西平县| 阜平县| 济源市| 阿瓦提县| 新龙县| 塘沽区| 新闻| 三河市| 武宣县| 青河县| 新泰市| 德格县| 合肥市| 深泽县| 呼图壁县| 东源县| 独山县| 苍溪县| 伊吾县| 乳山市| 甘孜县| 伊金霍洛旗| 芒康县| 静安区| 叙永县| 江陵县| 固阳县| 云林县| 龙口市| 城市|