C#類中static變量用法剖析。本站提示廣大學習愛好者:(C#類中static變量用法剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是C#類中static變量用法剖析正文
本文實例講述了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#法式設計有所贊助。