引用類型和值類型

来源:http://www.cnblogs.com/lanrenqilanming/archive/2017/01/07/6258897.html
-Advertisement-
Play Games

CLR支持兩種類型:引用類型和值類型。 引用類型總是從托管堆上分配,值類型一般線上程棧上分配。 在.NET Framework SDK中指出,任何稱為類的類型都是引用類型,所有值類型都成為結構或枚舉 以下代碼演示值類型與引用類型區別 值類型與引用類型的一些區別 值類型有已裝箱和未裝箱兩種形式,,引用 ...


CLR支持兩種類型:引用類型和值類型。

引用類型總是從托管堆上分配,值類型一般線上程棧上分配。

在.NET Framework SDK中指出,任何稱為類的類型都是引用類型,所有值類型都成為結構或枚舉

以下代碼演示值類型與引用類型區別

class someref
{
    public int x;//引用類型
}
struct someval
{
    public int x;//值類型
}
namespace 值類型_引用類型
{
    class Program
    {
        static void Main(string[] args)
        {
            someref r1 = new someref();//在堆上分配
            someval v1 = new someval();//在棧上分配
            r1.x = 5;//提領指針
            v1.x = 5;//在棧上修改
            Console.WriteLine(r1.x);//顯示5
            Console.WriteLine(v1.x);//顯示5
            Console.ReadKey();

            someref r2 = r1;//只複製引用(指針)
            someval v2 = v1;//在棧上從新分配並複製成員
            r1.x = 8;//r1,r2會同時改變,因為r1跟r2指向同一個東西
            v1.x = 9;//只改變v1,v2不變,因為v1,v2是兩個東西
            Console.WriteLine(r1.x);//顯示8
            Console.WriteLine(r2.x);//顯示8
            Console.WriteLine(v1.x);//顯示9
            Console.WriteLine(v2.x);//顯示5
        }
    }

}

值類型與引用類型的一些區別

     值類型有已裝箱和未裝箱兩種形式,,引用類型總是處於已裝箱形式。

     值類型從System.ValueType派生,該類型直接從System.Object派生,他重寫了System.Object的Equals和GetHashCode方法。

     值類型不能作為基類定義一個新的基類型或者引用類型,所以不能再值類型中引入新的虛方法,所有方法不能是抽象的,所有方法都不能重寫。

     引用類型的變數包含的是堆上的一個對象的地址。預設創建時被初始化為null,表明引用類型的變數當前不指向一個有效的對象。值類型的標量重視包含其基礎類型的一個值,而且

值類型的所有成員都初始化為0,。

     將一個值類型的變數賦給另一個值類型變數時會進行一次逐欄位的複製。將引用類型的變數賦給另一個引用類型時,只複製記憶體地址(如上例)。

     基於上一條,可能會有多個引用類型變數引用堆中的同一個對象,所以對一個變數的操作可能會影響其他變數引用的對象。相反值類型不會。

     由於未裝箱的值類型不在堆上分配,當定義該類型的方法不處於活動狀態時就會被釋放,也不會通過Finalize方法接收到通知。


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

-Advertisement-
Play Games
更多相關文章
  • 一. 準備工作 1. 樹莓派主板 型號:樹莓派3 B型 處理器:四核64位ARM Cortex-A53 CPU 內核架構:ARMv8 2. 一張大於8G的TF卡(本人用的是32G的,也作為PiLFS用) 3. 一臺筆記本電腦,一根網線 4. 點擊此找到並下載 Raspbian 系統 初學者建議推薦選 ...
  • 什麼是Vim? Vim 是經典的 UNIX 編輯器 Vi 的深度改良版本。它增加了許多功能,包括:多級撤銷、格式高亮、命令行歷史、線上幫助、拼寫檢查、文件名補完、塊操作、腳本支持,等等。除了字元界面版本之外,它也有圖形界面版本(比如 gVim)。雖然 Vi 還在繼續維護當中,但是大部分人都只在使用 ...
  • 最近看到Arduino可以利用pwm及蜂鳴器播放音樂,想到樹莓派上也有類似的pwm輸出,所以決定把相應的內容移植到樹莓派上,並給出了樹莓派播放鐵血丹心的例子! ...
  • 1、到Oracle公司的官網裡下載好jdk,網址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2、把下載好的jdk上傳到Linux系統里,這裡我藉助了一個工具WinSCP 3、 ...
  • 1、下載好VMware 2、準備好CentOS的鏡像文件 3、打開VMware創建新的虛擬機 選擇自定義高級後按下一步 繼續下一步 選擇稍後安裝操作系統 客戶機操作系統選擇Linux,版本選擇CentOS 64位(我的是64位的CentOS) 設置虛擬機名稱和安裝路徑 分配處理器 設置虛擬機的記憶體 ...
  • 1.Nginx安裝環境: gcc: 安裝nginx需要先將官網下載的源碼進行編譯,編譯依賴gcc環境,如果沒有gcc環境,需要安裝gcc:yum install gcc-c++ pcre:<!--[if gte mso 9]><xml> <o:OfficeDocumentSettings> <o:A ...
  • 第八節 Linux 文件的屬性(上半部分) 標簽(空格分隔):Linux實戰教學筆記 第1章 Linux中的文件 1.1 文件屬性概述(ls lhi) linux里一切皆文件 Linux系統中的文件或目錄的屬性主要包括:索引節點(inode),文件類型,許可權屬性,鏈接數,所歸屬的用戶和用戶組,最近修 ...
  • 我們要接入微信公眾號平臺開發,需要填寫伺服器配置,然後依據介面文檔才能實現業務邏輯。但是微信公眾號介面只支持80介面(80埠)。我們因業務需求需要在一個公眾號功能變數名稱下麵,發佈兩個需要微信授權的項目,怎麼辦? 我們可以用nginx伺服器做反向代理來解決這個問題。nginx伺服器對外80埠,然後根據U ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...