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

首頁 > 編程 > C# > 正文

C#類中static變量用法分析

2020-01-24 02:10:07
字體:
來源:轉載
供稿:網友

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

先來看一段代碼:

復制代碼 代碼如下:
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();

}
}
}


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

下面我解釋一下為什么是后一種結果

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

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

現在分析上面的代碼:

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

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

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 邯郸市| 宁化县| 东乡县| 峨山| 桦川县| 罗定市| 黄大仙区| 长宁区| 博客| 兰坪| 昌都县| 青神县| 焦作市| 梧州市| 广汉市| 丹凤县| 定结县| 宁远县| 阳城县| 西丰县| 龙胜| 奉化市| 潞西市| 依兰县| 青川县| 兴文县| 万州区| 项城市| 申扎县| 秭归县| 方正县| 嘉义市| 新宁县| 大连市| 梅河口市| 和硕县| 德州市| 鄯善县| 晋中市| 芒康县| 全南县|