程式如下:
複製** **如下:
public static string 英漢(string english,翻譯結果 乙個或多個)
else//可以翻譯
else if (乙個或多個 == 翻譯結果.乙個)
throw new exception("引數錯誤!");
} }
else }
catch (exception) }
分析了一下,原因在於每次呼叫這個方法時都會去載入黃程式設計客棧條處這個英漢辭典,如果執行2000次,就會載入2000次,自然速度慢,有沒有什麼辦法在程式執行時只載入一次呢?想起在尚學堂看過的設計模式中有乙個單例工廠模式,使用了靜態變數,似乎能夠解決,例項驗證:
先定義乙個類:
複製** **如下:
class 翻譯
public static xdocument 英漢辭典初始化()
else }
} 主程式:
複製** **如下:
var one = 翻譯.英漢辭典內容;
var two = 翻譯.英漢辭典內容;
if (one==two)
else
one = new 翻譯().構造英漢辭典內容;
two = new 翻譯().構造英漢辭典內容;
if (one == two)
else
結果:
分析如下:
無論是使用靜態的翻譯.英漢辭典內容,還是new 翻譯().構造英漢辭典內容,他們都呼叫了 英漢辭典初始化() ,但是靜態變數中的值只會初始化一次,後面每次訪問,都是上次處理過的值,所以第一次顯示的結果是相同,也就是說one,two的值其實是乙個,第二個two訪問的其實是第一次one初始化後的值;而使用類的建構函式來初始化變數每次都會重複初始化,自然其結果不同.
再比如(以下內容為**):
複製** **如下:
class program }
class sort }
總結:在類內部訪問靜態變數時,直接用靜態變數名即可,不用以(類名.靜態變數名),這樣的方式訪問,
除了有靜態變數之外,還有靜態類例項,還有靜態方法.但用法都是大同小異;
如:public static void myfun(){} //靜態方法
private static random myrandom=new random(); //靜態類例項
之所以有時宣告為私有靜態變數,是為了讓它只初始化一次.這樣節省了記憶體空間
但又想讓它在外部是不可訪問的,這樣利用私有這個訪問限定符就搞定了.
私有靜態:安全又節省空間.
例:如果想在每次例項化類的時間生成一組隨機數,但產生隨機數是要用到乙個類的,即random,這個類不是靜態類,它要產生例項,用產生的例項來生成隨機數,但如果在每次類例項化時都產生乙個random例項,那記憶體空間簡直是極大的浪費,所以可以用:
private static random myrandom=new random();
這樣每次類例項化時,都會用同乙個random例項myrandom來產生隨機數
本文標題: c# 靜態變數與靜態方法例項研究
本文位址: /ruanjian/csharp/85148.html
C 靜態變數與例項變數
c 靜態變數與例項變數 在語法定義上的區別 類變數也叫靜態變數,靜態變數前要加static關鍵字,而例項變數前則不加 例項變數也叫物件變數,即沒加static 的變數 在程式執行時的區別 例項變數屬於某個物件的屬性,必須建立了例項物件,其中的例項變數才會被分配空間,才能使用這個例項變數。靜態變數不屬...
靜態變數與靜態方法
static 可實現所有的物件共享乙個成員變數。被 static 修飾的成員稱為靜態成員或類成員。它屬於整個類所有,而不是某個物件所有,即被類的所有物件所共享。訪問static成員變數有兩種方式 直接用類名.成員變數名訪問 定義類的物件,使用物件.成員變數名訪問。public class name ...
靜態變數與靜態方法
使用static修飾的方法稱作靜態方法,又稱類方法。同樣的,使用static修飾的變數又稱作類變數或者靜態變數。靜態方法有如下特點 1 應該通過類名直接呼叫,不用通過引用呼叫。2 方法內部 只能夠使用本方法內的區域性變數 方法的引數 靜態變數和靜態方法。不能使用非靜態的變數和非靜態的方法。同樣也不能...