由例項計數器引出(C#) (轉)
由例項計數器引出()
好久沒發表文章了,說也有趣,突然感覺C#中的有些類,為什麼,其構造器是不可見的?
而且通常這些類在一箇中往往只有一個例項存在。於是,我做了個實驗結果如下:
由該例子引出:
using System;
namespace ConsoleApplication1
{
///
/// Class1 的摘要說明。
///
class Class1
{
///
/// 應用程式的主入口點。
///
[STAThread]
static void Main(string[] args)
{
//
// TODO: 在此處新增程式碼以啟動應用程式
Class2 c1=Class2.Init;
Class2 c2=Class2.Init;
c2.refDis();
Class3 c3=new Class3();
Class3 c4=c3;
c4.refDis();
Class3 c5=new Class3();
c5.refDis();
Console.ReadLine();
}
}
class Class2
{
static int ref_2=0;
private Class2()
{
++ref_2;
}
public static readonly Class2 Init=new Class2();
public void refDis()
{
Console.WriteLine("Class2 的引用: "+ref_2);
}
}
class Class3
{
static int ref_3=0;
public Class3(){++ref_3;}
public void refDis()
{
Console.WriteLine("Class3 的引用: "+ref_3);
}
}
}
輸出結果:
Class2 的引用: 1
Class3 的引用: 1
Class3 的引用: 2
看了上面的結果也許你會感到有些吃驚,也許不會,不是嗎?很多情況下,我們都試圖
來得到一個類的例項有多少?通常會想到的做法是例項計數器。是的,用一個static變數
來做例項計數器是在合適不過的了。可是,也有些時候,我們並不希望,我們的例項太多
如:DataRead它始終只有一個。那麼,我們該怎麼做呢?看到了上面我的實驗結果了嗎?
啊哏,發現什麼了嗎?public static readonly Class2 Init=new Class2();
對這一句很感興趣是嗎?你有什麼異議嗎?去掉那個static行嗎?那麼好吧,如你所願。
象這樣:public readonly Class2 Init=new Class2(); 讓我們看看會發生什麼,啊噢
瞧見了。沒辦法例項化操作了。呵呵。。。別擔心,讓我來進一步說明,static成員被
放在靜態區,是在程式載入初期就完成的。那麼很顯然,Init的值,事實上是
在一開始,就new了一個給它。那麼它持有該物件的一個引用。下面讓我們看看這兩句
Class2 c1=Class2.Init;
Class2 c2=Class2.Init;
看上去沒什麼特別的,是啊,根據我上面的說法,這僅僅只是在傳遞引用。所以例項計數器
始終是一,因為,我說了,是在程式的一開始,就完成了配置。那麼下面的這幾句,就是最好
的說明:
//傳遞引用並未例項新物件,因此例項計數器依然是1
Class3 c3=new Class3();
Class3 c4=c3;
c4.refDis();
//分配了新的例項一次,例項計數器的值加1。也就是2
Class3 c5=new Class3();
c5.refDis();
一切都和想象中的一樣。我想,這就是生活。盡情享受,毫無疑問,這是對的。那麼下回再見
(完)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-993844/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 由顯示/隱藏引出的CSSbug(轉)CSS
- 由顯示/隱藏引出的CSS Bug(轉)CSS
- 用c#控制windows自帶計算器例項C#Windows
- iOS計步器例項iOS
- 網頁倒數計時跳轉程式碼例項網頁
- Android感測器程式設計帶例項(轉)Android程式設計
- C# BitArray 例項C#
- C# 位運算及例項計算C#
- c# winform程式設計轉例C#ORM程式設計
- setTimeout()實現的計數器功能程式碼例項
- C#多執行緒程式設計例項C#執行緒程式設計
- C# 2.0 套接字程式設計例項初探程式設計
- C#例項構造器,型別構造器 -筆記型別筆記
- Excel函式應用例項:計算授課天數(轉)Excel函式
- 限制程式執行例項數 (轉)
- ruby中的類例項變數和例項的例項變數變數
- 【RAC】由系統環境變數中"/"引起的空閒例項變數
- javascript 計算器程式碼例項JavaScript
- XML程式設計例項(二) (轉)XML程式設計
- java_隨機數(統計例項)Java隨機
- JavaScript倒數計時程式碼例項JavaScript
- 倒數計時指定時間頁面跳轉程式碼例項
- C#開發例項大全C#
- 【C#之Try……Catch例項】C#
- C#利用反射建立例項C#反射
- 原生javascript開發計算器例項JavaScript
- 由Java中的Set,List,Map引出的排序技巧Java排序
- js將小數轉換為整數程式碼例項JS
- Excel函式應用例項:按性別統計職工數(轉)Excel函式
- 遠端開發分散式C#程式設計例項分散式C#程式設計
- jQuery倒數計時效果程式碼例項jQuery
- css自定義列表計數程式碼例項CSS
- JavaScript春節倒數計時程式碼例項JavaScript
- C# 通過反射建立例項C#反射
- C#例項建構函式C#函式
- 第二個MFC例項:GPA計算器
- 演算法設計應用例項 (轉)演算法
- 沉浸進行時 —— 由Diegetic UI引出的概念學習UI