第3篇 構造函數與析構函數

来源:http://www.cnblogs.com/liebehang/archive/2017/11/21/7873150.html
-Advertisement-
Play Games

一 對象的生命周期 對象作為類的實例,在程式運行過程中需要占用一定的記憶體空間,.NET公共語言運行時負責其記憶體管理,在對象出生時,為其分配記憶體,在對象銷毀時再收回它所占用的記憶體。 值類型變數在“棧”中管理,棧是一種按照“先進後出”方式存取的記憶體區域。當方法被調用時,方法進棧,方法內的值類型變數(包括 ...


對象的生命周期

       對象作為類的實例,在程式運行過程中需要占用一定的記憶體空間,.NET公共語言運行時負責其記憶體管理,在對象出生時,為其分配記憶體,在對象銷毀時再收回它所占用的記憶體。

       值類型變數在“棧”中管理,棧是一種按照“先進後出”方式存取的記憶體區域。當方法被調用時,方法進棧,方法內的值類型變數(包括行參變數)自動獲取記憶體,當方法調用結束時,這些變數所占用的記憶體會被自動釋放。

        引用類型變數在“堆”中管理,在方法調用的過程中,一旦使用了運算符new實例化了對象,.NET公共語言運行時就會立刻在堆中分配記憶體給該對象。而當方法調用結束時候,對象所占用的記憶體不會自動從堆中釋放。在.NET中,對象所占用的記憶體智能有公共語言運行時的垃圾回收器(GC)來回收,垃圾回收器沒有預定的工作模式,他的工作時間間隔是不可預知的,通常在電腦記憶體不足的時候才自動啟動。

 

圖1-1 對象生命周期

構造函數

       構造函數的命名與類名相同,它的作用主要用來初始化對象。一個類可以有多個構造函數,即構造函數重載。

.      構造函數不能被直接調用,必須通過new運算符在創建對象時才會自動調用;而一般的方法是在程式執行到它的時候被調用的;

當一個類只定義了私有的構造函數,將無法通過new關鍵字來創建其對象,當一個類沒有定義任何構造函數,C#編譯器會為其自動生成一個預設的無參的構造函數。

三 析構函數

       析構函數的命名是在類名前加“~”的方式命名,它作用是用來回收類的實例所占用的資源,對象在銷毀前,公共語言運行時會自動調用析構函數並使用垃圾回收器回收對象的記憶體空間。

  1. 每個類只能有一個析構函數,析構函數不能繼承,也不能重載。
  2. 析構函數沒有修飾符,沒有參數。
  3. 析構函數中不能包含對Object.Finalize方法的調用,因為公共語言運行時會在析構函數被調用時自動調用Object.Finalize方法。
  4. 結構中不能定義析構函數。

      備註:構造函數是用來創建對象的,每個被創建的對象有自己獨立的屬性和方法。然而實際開發中,有些屬性和方法並不具有特殊性,類的每一個對象其某個屬性或者方法可以完全一致,此時我們可以將此屬性或者方法標為靜態。更多內容請查看4靜態


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 當遇到以下場景: 其他人寫的單元測試影響統計結果 一些需要調用外部介面的測試暫不運行 需要在非本機環境上運行一些不回滾的單元測試 則有必要選擇以下方法跳過部分測試。 在測試用例前加上註解 @Ignore,例如: @Ignore @Test public void testGetAreaChirldr... ...
  • 學習python前需要有許多準備知識,整理大致如下: 以上儘快完成,並搭建項目。 ...
  • 一、同步(Synchronous)和非同步(Asynchronous) 同步和非同步通常用來形容一次方法調用,同步方法,調用者必須等到方法調用返回後,才能繼續後續的行為,非同步方法調用會立即返回,調用者就可以繼續後續的操作 二、併發和並行 併發和並行都可以表示兩個或多個任務一起執行,但偏重點點不同,併發偏 ...
  • Python之Django環境搭建(MAC+pycharm+Django++postgreSQL) 轉載請註明地址:http://www.cnblogs.com/funnyzpc/p/7828614.html 搭建Django環境似乎是一件很簡單的事情,其實不然,苦命的我折騰了大半天才好, 遂在此總 ...
  • 單例模型 類圖分為3個部分,一次是類名,屬性,方法。以<<開頭和以>>結尾為註釋信息。修飾符+代表public,-代表private,#代表protected。什麼都沒有代表包可見(java) 帶下劃線的屬性或方法代表說靜態。 單例模式特點: 1 構造方法私有。 2 只想自己實例的私有靜態引用 3 ...
  • 題目描述 Caima王國中有一個奇怪的監獄,這個監獄一共有P個牢房,這些牢房一字排開,第i個緊挨著第i+1個(最後一個除外)。現在正好牢房是滿的。 上級下發了一個釋放名單,要求每天釋放名單上的一個人。這可把看守們嚇得不輕,因為看守們知道,現在牢房中的P個人,可以相互之間傳話。如果某個人離開了,那麼原 ...
  • 1. 讀取文件 使用 open 函數或者 file 函數來讀文件,使用文件名的字元串作為輸入參數 遍歷列印文件中每一行: 或: 2. 寫文件 open()預設已r模式打開文件,要想寫入,需已w模式打開文件。以w模式打開時,如果文件不存在則創建文件,如果文件存在則覆蓋之前的內容。 3. 關閉文件 關閉 ...
  • 接下來簡單總結一下設計模式的六大基本原則: 1.開閉原則: 對拓展開放,對修改關閉(對程式拓展時不會修改原有代碼,為了達到這樣的效果,需要使用介面和抽象類) 2.里氏替換原則:對任何基類出現的地方,子類一定可以替換出現 3.依賴倒置原則:在開閉原則的基礎上,針對介面編程,依賴抽象類而不去依賴具體的類 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...