C#進修筆記整頓_深刻分析結構函數、析構函數。本站提示廣大學習愛好者:(C#進修筆記整頓_深刻分析結構函數、析構函數)文章只能為提供參考,不一定能成為您想要的結果。以下是C#進修筆記整頓_深刻分析結構函數、析構函數正文
結構函數、析構函數
結構函數:
1.若沒供給任何結構函數,則體系會主動供給一個默許的結構函數,初始化一切成員為默許值(援用類型為空援用null,值類型為0,bool類型為false);
2.若供給了帶參數的結構函數,則體系不供給默許的結構函數;
3.結構函數可重載:可供給多個分歧版本的結構函數,根據參數的個數、類型來辨別;
4.公有結構函數:則沒法經由過程該結構函數實例化該對象,可經由過程挪用靜態函數來實例化;當僅用作某些靜態成員或屬性的容器時,可界說公有結構函數來避免被實例化;
普通的結構函數都是實例結構函數,只需創立實例,就履行結構函數;
靜態結構函數:
1.只能界說一個,最多運轉一次,僅在第一次挪用類的任何成員之前由.NET運轉庫挪用它,
2.它不克不及帶任何參數、無任何拜訪潤飾符,只能拜訪類的靜態成員,沒法拜訪到類的實例成員;
3.假如類有一些靜態字段、屬性須要在第一次應用類之前從內部源中初始化,則應用靜態結構函數;
4.靜態結構函數與無參數的實例結構函數可以同時界說,什麼時候履行哪一個結構函數不會抵觸;
在結構函數中可以挪用本身的其它結構函數:this(),或父類的結構函數:base(),可相似繼續的語法挪用其它結構函數;
只讀字段readonly:和常量const相似,不克不及修正其值,但只讀字段用readonly聲明,可以未初始化,在結構函數中對其初始化,以後弗成更改其值;
匿名類型的實例化:var a = new{f1=“1ad”, f2=”34”, f3=5, f4=6};
結構函數:用於析構類的實例
• 不克不及在構造中界說析構函數。只能對類應用析構函數。
• 一個類只能有一個析構函數。
• 沒法繼續或重載析構函數。
• 沒法挪用析構函數。它們是被主動挪用的。由渣滓收受接管器掌握,假如渣滓收受接管器以為某個對象相符析構,則挪用析構函數(假如有)並收受接管用來存儲此對象的內存。法式加入時也會挪用析構函數
• 析構函數既沒有潤飾符,也沒有參數
可以經由過程挪用 Collect 強迫停止渣滓收受接管,但年夜多半情形下應防止如許做,由於如許會招致機能成績
C# 無需太多的內存治理。這是由於 .NET Framework 渣滓收受接管器會隱式地治理對象的內存分派和釋放。然則,當運用法式封裝窗口、文件和收集銜接這類非托管資本時,應該應用析構函數釋放這些資本。當對象相符析構時,渣滓收受接管器將運轉對象的 Finalize 辦法。
假如您的運用法式在應用昂貴的內部資本,我們還建議您供給一種在渣滓收受接管器釋放對象前顯式地釋放資本的方法。可經由過程完成來自 IDisposable 接口的 Dispose 辦法來完成這一點,該辦法為對象履行需要的清算。如許可年夜年夜進步運用法式的機能。即便有這類對資本的顯式掌握,析構函數也是一種掩護辦法,可用來在對 Dispose 辦法的挪用掉敗時清算資本
class Car { -Car() { // … … } }
該析構函數隱式地對繼續鏈中的一切實例遞歸地挪用挪用 Finalize()辦法
public class Bus { protected static readonly DateTime globalStartTime; protected int RouteNumber { get; set; } static Bus() //靜態結構函數 { 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. */
以上就是小編為年夜家帶來的C#進修筆記整頓_深刻分析結構函數、析構函數的全體內容了,願望對年夜家有所贊助,多多支撐~