亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C#類中static變量用法分析

 更新時間:2015年01月26日 11:37:53   投稿:shichen2014  
這篇文章主要介紹了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è)計有所幫助。

相關(guān)文章

  • C#中調(diào)用DLL時未能加載文件或程序集錯誤的處理方法(詳解)

    C#中調(diào)用DLL時未能加載文件或程序集錯誤的處理方法(詳解)

    下面小編就為大家?guī)硪黄狢#中調(diào)用DLL時未能加載文件或程序集錯誤的處理方法(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • C#實現(xiàn)拼圖小游戲

    C#實現(xiàn)拼圖小游戲

    這篇文章主要為大家詳細介紹了C#實現(xiàn)拼圖小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • WPF實現(xiàn)雷達圖(仿英雄聯(lián)盟)的示例代碼

    WPF實現(xiàn)雷達圖(仿英雄聯(lián)盟)的示例代碼

    這篇文章主要介紹了如何利用WPF實現(xiàn)雷達圖(仿英雄聯(lián)盟)的繪制,文中的示例代碼講解詳細,對我們學(xué)習(xí)或工作有一定幫助,需要的可以參考一下
    2022-07-07
  • C#文件斷點續(xù)傳實現(xiàn)方法

    C#文件斷點續(xù)傳實現(xiàn)方法

    這篇文章主要介紹了C#文件斷點續(xù)傳實現(xiàn)方法,涉及C#文件傳輸?shù)募记?具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • C#實現(xiàn)獲取運行平臺系統(tǒng)信息的方法

    C#實現(xiàn)獲取運行平臺系統(tǒng)信息的方法

    這篇文章主要介紹了C#實現(xiàn)獲取運行平臺系統(tǒng)信息的方法,比較典型的C#應(yīng)用,需要的朋友可以參考下
    2014-07-07
  • unity實現(xiàn)翻頁效果

    unity實現(xiàn)翻頁效果

    這篇文章主要為大家詳細介紹了unity實現(xiàn)翻頁效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • C#使用非托管代碼直接修改字符串的方法

    C#使用非托管代碼直接修改字符串的方法

    在string方法中,如ToUpper等字符串操作方法,都會產(chǎn)生一個新的字符串,這樣增大了運行開支。一個替代方案是通過非托管代碼直接操作字符串。如替代ToUpper方法:
    2013-07-07
  • C#自定義RSA加密解密及RSA簽名和驗證類實例

    C#自定義RSA加密解密及RSA簽名和驗證類實例

    這篇文章主要介紹了C#自定義RSA加密解密及RSA簽名和驗證類,實例分析了C#實現(xiàn)RSA加密解密及RSA簽名和驗證的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • c# 實現(xiàn)打印機狀態(tài)查詢與阻塞打印

    c# 實現(xiàn)打印機狀態(tài)查詢與阻塞打印

    這篇文章主要介紹了c# 引用System.Management來實現(xiàn)對打印機狀態(tài)的查詢,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-05-05
  • C#中C/S端實現(xiàn)WebService服務(wù)

    C#中C/S端實現(xiàn)WebService服務(wù)

    本文主要介紹了C#中C/S端實現(xiàn)WebService服務(wù),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07

最新評論