常被人誤解的基礎知識 C#篇

来源:http://www.cnblogs.com/frame943581425/archive/2017/08/24/7422348.html
-Advertisement-
Play Games

對值類型和引用類型的誤解 (引用類型存儲在堆上,值類型存儲在棧上) 對值類型和引用類型的誤解 (引用類型存儲在堆上,值類型存儲在棧上) 在學習C#基礎篇幅的時候總是逃不掉值類型和引用類型,很多新手包括我以前對它的理解也只是停留在"引用類型存儲在堆上,值類型存儲在棧上". 這個誤區主要歸咎於我們根本沒 ...


  • 對值類型和引用類型的誤解 (引用類型存儲在堆上,值類型存儲在棧上)

          在學習C#基礎篇幅的時候總是逃不掉值類型和引用類型,很多新手包括我以前對它的理解也只是停留在"引用類型存儲在堆上,值類型存儲在棧上".

          這個誤區主要歸咎於我們根本沒有動腦筋,第一句話是正確的,引用類型的實例總是在堆上創建的.但後一句就有問題了.設想假定一個類中有一個int類型的實例變數.

          

public class User
{
   public int Age { get; set; }
}

  那麼在這個User類中的該變數的值總是和對象中的其它數據在一起,也就是在堆上. 事實上只有局部變數和方法參數在棧上,但是也有特殊情況 局部變數並不存放

  在棧上,比如匿名函數閉包,這些特性不適合新手這裡就不說明瞭.

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  • Var是動態類型嗎?

     這個問題對於JavaScript程式員才學C#的時候很容易混淆.雖然C#不是完全的強類型語言(C#4.0以上允許你使用動態類型),但在C#3.0以下基本還算是強類型語言

     在說明var的關鍵字之前,需要大家知道的是 C#2.0是對CLR進行了改動,但在隨後面的版本基本都沒發生重大的改動,這意味著很多後面加入特性都是 編譯器在默默的幫助你,

     比如C#3.0引入Var類型. 為了更好的說明Var不是動態類型我還是引入一個實例

 

  

static void Main(string[] args)
{
    var str = "Hello, world.";
    str = 10;
}

上述代碼是無法通過編譯的,編譯器會告訴你" 無法將類型“int”隱式轉換為“string".

因為str的類型是String,在編譯時就確定了數據類型,所以你也無法使用下麵這種代碼

static void Main(string[] args)
 {
    var obj =null;  //聲明空指針
    var obj;          
 }

這也證明瞭它確實在編譯時就確定了類型,只是編譯器幫你變的魔術而已 ,因為編譯器是在編譯時推斷的,所以它肯本不知道這是什麼東東,這樣它的魔法就失靈了.

 

 (未完後續補充......)

   


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

-Advertisement-
Play Games
更多相關文章
  • 最近掛載了N多的文件系統,大致了不同文件系統的相應特性及掛載方式,卻還是對Linux的文件系統沒有從源碼方面去瞭解。不求甚解確實不好不好。 於是借鑒一些大牛的博客及自己的理解,總結了博客系列: 一、VFS是什麼: VFS是Linux中的一個虛擬文件文件系統,也稱為虛擬文件系統交換層(Virtual ...
  • Vista 和 Windows7 系統都很註重系統的安全性,在提高安全性的同時,也給我們某些應用帶來不便,例如需要安裝插件或證書,可能會彈出“由於無法驗證發行者,所以WINDOWS已經阻止此軟體”的相關提示,而致使無法正常使用該軟體,下麵分享解決此類提示的方法: 按下麵兩步操作,一般情況都可以解決此 ...
  • 為什麼降呢?就從看到朋友的win10是盜版說起。正好手頭上有辦法激活win7旗艦,還有個小心思,看著10特不舒服,估計又加了一些小白完全用不上的東西,想到就動手,以下是倒騰了幾天的小總結。 首先,win是不支持降級的很明顯,不管怎麼試都失敗,u盤安裝,硬碟安裝還是cd裝,統統無用,在磨夠了耐性以後, ...
  • 一、Oracle VirtualBox安裝Linux7.0全屏設置 1. 點擊菜單欄 設備 –> 分配光碟機 –> 選擇一個虛擬光碟,找到VirtualBox安裝目錄下的VBoxGuestAdditions.iso,載入此鏡像。2. 啟動Linux系統並用root身份登入系統3. 執行掛載命令,將虛擬 ...
  • 參考了兩種方法: 1. 解決fatal: unable to connect to github.com問題 http://blog.csdn.net/greenqingqingws/article/details/11808745原因:需要用https才能讀到數據解決方法:輸入命令git conf ...
  • 有話要說 為什麼要用Linux?要用Linux的原因太多,想說說不完啊。 如果你說用Linux只是為了裝逼,那證明你真的還很菜。不排除有裝逼了因素,那也只占非常少的比例,可以忽略不計。 我們反問一下,為什麼不用Linux呢?回答無非就是:沒有圖像界面、操作太複雜、和我以前的使用習慣不一樣、學習新的系 ...
  • 添加PPA: 1、首先進入ubuntu系統,system—>administration—>update manager—>setting,在軟體源界面,點擊other software 標簽頁,點擊左下角的add,將獲得的PPA地址粘貼進來。 2、也可以在終端輸入,sudo gedit /etc/ ...
  • 本節課程,需要完成擴增子分析解讀1質控 實驗設計 雙端序列合併 先看一下擴增子分析的整體流程,從下向上逐層分析 分析前準備 # 進入工作目錄 cd example_PE250 上一節回顧:我們拿到了雙端數據,進行了質控、並對實驗設計進行了填寫和檢查、最後將雙端數據合併為單個文件進行下游分析。 接下來 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...