<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 析構函數(C# 編程指南) 析構函數用于析構類的實例。 ## 備注 * 不能在結構中定義析構函數。只能對類使用析構函數。 * 一個類只能有一個析構函數。 * 無法繼承或重載析構函數。 * 無法調用析構函數。它們是被自動調用的。 * 析構函數既沒有修飾符,也沒有參數。 例如,下面是類 Car 的析構函數的聲明: ``` class Car { ~Car() // destructor { // cleanup statements... } } ``` 該析構函數隱式地對對象的基類調用 [Finalize](https://msdn.microsoft.com/zh-cn/library/system.object.finalize.aspx)。這樣,前面的析構函數代碼被隱式地轉換為以下代碼: ``` protected override void Finalize() { try { // Cleanup statements... } finally { base.Finalize(); } } ``` 這意味著對繼承鏈中的所有實例遞歸地調用 Finalize 方法(從派生程度最大的到派生程度最小的)。 | ![](https://box.kancloud.cn/2016-01-31_56adb62c1380a.jpg) 注意 | | :-- | | 不應使用空析構函數。如果類包含析構函數,Finalize 隊列中則會創建一個項。調用析構函數時,將調用垃圾回收器來處理該隊列。如果析構函數為空,只會導致不必要的性能損失。 | 程序員無法控制何時調用析構函數,因為這是由垃圾回收器決定的。垃圾回收器檢查是否存在應用程序不再使用的對象。如果垃圾回收器認為某個對象符合析構,則調用析構函數(如果有)并回收用來存儲此對象的內存。程序退出時也會調用析構函數。 可以通過調用 [Collect](https://msdn.microsoft.com/zh-cn/library/system.gc.collect.aspx) 強制進行垃圾回收,但大多數情況下應避免這樣做,因為這樣會導致性能問題。 ## 使用析構函數釋放資源 通常,與運行時不進行垃圾回收的開發語言相比,C# 無需太多的內存管理。這是因為 .NET Framework 垃圾回收器會隱式地管理對象的內存分配和釋放。但是,當應用程序封裝窗口、文件和網絡連接這類非托管資源時,應當使用析構函數釋放這些資源。當對象符合析構時,垃圾回收器將運行對象的 Finalize 方法。 ## 資源的顯式釋放 如果您的應用程序在使用昂貴的外部資源,我們還建議您提供一種在垃圾回收器釋放對象前顯式地釋放資源的方式。可通過實現來自 [IDisposable](https://msdn.microsoft.com/zh-cn/library/system.idisposable.aspx) 接口的 Dispose 方法來完成這一點,該方法為對象執行必要的清理。這樣可大大提高應用程序的性能。即使有這種對資源的顯式控制,析構函數也是一種保護措施,可用來在對 Dispose 方法的調用失敗時清理資源。 有關清理資源的更多詳細信息,請參見下列主題: * [Cleaning Up Unmanaged Resources](https://msdn.microsoft.com/zh-cn/library/498928w2.aspx) * [Implementing a Dispose Method](https://msdn.microsoft.com/zh-cn/library/fs2xkftw.aspx) * [using 語句(C# 參考)](https://msdn.microsoft.com/zh-cn/library/yh598w02.aspx) 下面的示例創建三個類,這三個類構成了一個繼承鏈。類 First 是基類,Second 是從 First 派生的,而 Third 是從 Second 派生的。這三個類都有析構函數。在 Main() 中,創建了派生程度最大的類的實例。注意:程序運行時,這三個類的析構函數將自動被調用,并且是按照從派生程度最大的到派生程度最小的次序調用。 ``` class First { ~First() { System.Diagnostics.Trace.WriteLine("First's destructor is called."); } } class Second : First { ~Second() { System.Diagnostics.Trace.WriteLine("Second's destructor is called."); } } class Third : Second { ~Third() { System.Diagnostics.Trace.WriteLine("Third's destructor is called."); } } class TestDestructors { static void Main() { Third t = new Third(); } } /* Output (to VS Output Window): Third's destructor is called. Second's destructor is called. First's destructor is called. */ ``` ## C# 語言規范 有關詳細信息,請參閱 [C# 語言規范](https://msdn.microsoft.com/zh-cn/library/ms228593.aspx)。該語言規范是 C# 語法和用法的權威資料。 ## 請參閱 [IDisposable](https://msdn.microsoft.com/zh-cn/library/system.idisposable.aspx) [C# 編程指南](https://msdn.microsoft.com/zh-cn/library/67ef8sbd.aspx) [構造函數(C# 編程指南)](https://msdn.microsoft.com/zh-cn/library/ace5hbzh.aspx) [Garbage Collection](https://msdn.microsoft.com/zh-cn/library/0xy59wtx.aspx)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看