C#學習筆記整理
構造函數(shù)、析構函數(shù)
構造函數(shù):
1.若沒提供任何構造函數(shù),則系統(tǒng)會自動提供一個默認的構造函數(shù),初始化所有成員為默認值(引用類型為空引用null,值類型為0,bool類型為false);
2.若提供了帶參數(shù)的構造函數(shù),則系統(tǒng)不提供默認的構造函數(shù);
3.構造函數(shù)可重載:可提供多個不同版本的構造函數(shù),依據(jù)參數(shù)的個數(shù)、類型來區(qū)分;
4.私有構造函數(shù):則無法通過該構造函數(shù)實例化該對象,可通過調(diào)用靜態(tài)函數(shù)來實例化;當僅用作某些靜態(tài)成員或?qū)傩缘娜萜鲿r,可定義私有構造函數(shù)來防止被實例化;
一般的構造函數(shù)都是實例構造函數(shù),只要創(chuàng)建實例,就執(zhí)行構造函數(shù);
靜態(tài)構造函數(shù):
1.只能定義一個,最多運行一次,僅在第一次調(diào)用類的任何成員之前由.NET運行庫調(diào)用它,
2.它不能帶任何參數(shù)、無任何訪問修飾符,只能訪問類的靜態(tài)成員,無法訪問到類的實例成員;
3.如果類有一些靜態(tài)字段、屬性需要在第一次使用類之前從外部源中初始化,則使用靜態(tài)構造函數(shù);
4.靜態(tài)構造函數(shù)與無參數(shù)的實例構造函數(shù)可以同時定義,何時執(zhí)行哪個構造函數(shù)不會沖突;
在構造函數(shù)中可以調(diào)用自身的其它構造函數(shù):this(),或父類的構造函數(shù):base(),可類似繼承的語法調(diào)用其它構造函數(shù);
只讀字段readonly:和常量const類似,不能修改其值,但只讀字段用readonly聲明,可以未初始化,在構造函數(shù)中對其初始化,之后不可更改其值;
匿名類型的實例化:var a = new{f1=“1ad”, f2=”34”, f3=5, f4=6};
構造函數(shù):用于析構類的實例
• 不能在結構中定義析構函數(shù)。只能對類使用析構函數(shù)。
• 一個類只能有一個析構函數(shù)。
• 無法繼承或重載析構函數(shù)。
• 無法調(diào)用析構函數(shù)。它們是被自動調(diào)用的。由垃圾回收器控制,如果垃圾回收器認為某個對象符合析構,則調(diào)用析構函數(shù)(如果有)并回收用來存儲此對象的內(nèi)存。程序退出時也會調(diào)用析構函數(shù)
• 析構函數(shù)既沒有修飾符,也沒有參數(shù)
可以通過調(diào)用 Collect 強制進行垃圾回收,但大多數(shù)情況下應避免這樣做,因為這樣會導致性能問題
C# 無需太多的內(nèi)存管理。這是因為 .NET Framework 垃圾回收器會隱式地管理對象的內(nèi)存分配和釋放。但是,當應用程序封裝窗口、文件和網(wǎng)絡連接這類非托管資源時,應當使用析構函數(shù)釋放這些資源。當對象符合析構時,垃圾回收器將運行對象的 Finalize 方法。
如果您的應用程序在使用昂貴的外部資源,我們還建議您提供一種在垃圾回收器釋放對象前顯式地釋放資源的方式。可通過實現(xiàn)來自 IDisposable 接口的 Dispose 方法來完成這一點,該方法為對象執(zhí)行必要的清理。這樣可大大提高應用程序的性能。即使有這種對資源的顯式控制,析構函數(shù)也是一種保護措施,可用來在對 Dispose 方法的調(diào)用失敗時清理資源
class Car { -Car() { // … … } }
該析構函數(shù)隱式地對繼承鏈中的所有實例遞歸地調(diào)用調(diào)用 Finalize()方法
public class Bus { protected static readonly DateTime globalStartTime; protected int RouteNumber { get; set; } static Bus() //靜態(tài)構造函數(shù) { globalStartTime = DateTime.Now; Console.WriteLine("Static ctor sets global start time to {0}", globalStartTime.ToLongTimeString()); } public Bus(int routeNum) { RouteNumber = routeNum; Console.WriteLine("{0} is created.", RouteNumber); } public void Drive() { TimeSpan elapsedTime = DateTime.Now - globalStartTime; Console.WriteLine("{0} is starting its route {1:N2} minutes after global start time {2}.", this.RouteNumber, elapsedTime.TotalMilliseconds, globalStartTime.ToShortTimeString()); } } class TestBus { static void Main() { Bus bus = new Bus(71); bus.Drive(); System.Threading.Thread.Sleep(25); Bus bus2 = new Bus(72); bus2.Drive(); System.Console.WriteLine("Press any key to exit."); System.Console.ReadKey(); } } /* Output: Static ctor sets global start time to 10:04:08 AM 71 is created. 71 is starting its route 21.00 minutes after global start time 10:04 AM. 72 is created. 72 is starting its route 46.00 minutes after global start time 10:04 AM. */
以上就是小編為大家?guī)淼腃#學習筆記整理_深入剖析構造函數(shù)、析構函數(shù)的全部內(nèi)容了,希望對大家有所幫助,多多支持我們~
上一篇:讓C# Excel導入導出 支持不同版本Office
欄 目:C#教程
本文標題:C#學習筆記整理
本文地址:http://mengdiqiu.com.cn/a1/C_jiaocheng/6277.html
您可能感興趣的文章
- 01-10C#影院售票系統(tǒng)畢業(yè)設計(1)
- 01-10輕松學習C#的運算符
- 01-10輕松學習C#的基礎入門
- 01-10輕松學習C#的裝箱與拆箱
- 01-10輕松學習C#的預定義數(shù)據(jù)類型
- 01-10輕松學習C#的foreach迭代語句
- 01-10輕松學習C#的讀寫操作
- 01-10輕松學習C#的String類
- 01-10輕松學習C#的ArrayList類
- 01-10輕松學習C#的密封類


閱讀排行
本欄相關
- 01-10C#通過反射獲取當前工程中所有窗體并
- 01-10關于ASP網(wǎng)頁無法打開的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實現(xiàn)txt定位指定行完整實例
- 01-10WinForm實現(xiàn)仿視頻 器左下角滾動新
- 01-10C#停止線程的方法
- 01-10C#實現(xiàn)清空回收站的方法
- 01-10C#通過重寫Panel改變邊框顏色與寬度的
- 01-10C#實現(xiàn)讀取注冊表監(jiān)控當前操作系統(tǒng)已
隨機閱讀
- 01-10SublimeText編譯C開發(fā)環(huán)境設置
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-10C#中split用法實例總結
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-11ajax實現(xiàn)頁面的局部加載
- 04-02jquery與jsp,用jquery
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10delphi制作wav文件的方法
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改