C#語法糖之第一篇:自動屬性&隱式類型

来源:http://www.cnblogs.com/androidshouce/archive/2016/07/12/5662263.html
-Advertisement-
Play Games

今天給大家分享一下C#語法糖的簡單的兩個知識點吧。 自動屬性:在 C# 4.0 和更高版本中,當屬性的訪問器中不需要其他邏輯時,自動實現的屬性可使屬性聲明更加簡潔。 客戶端代碼還可通過這些屬性創建對象。 get and set accessors." id="mt3">如下麵的示例所示聲明屬性時,編 ...


今天給大家分享一下C#語法糖的簡單的兩個知識點吧。

自動屬性:在 C# 4.0 和更高版本中,當屬性的訪問器中不需要其他邏輯時,自動實現的屬性可使屬性聲明更加簡潔。 客戶端代碼還可通過這些屬性創建對象。 get and set accessors." id="mt3">如下麵的示例所示聲明屬性時,編譯器將創建一個私有的匿名支持欄位,該欄位只能通過屬性的 get 和 set 訪問器進行訪問。

我們C#4.0以前的傳統方式的屬性是用來封裝欄位的,這裡我簡單的對比一下這兩種方式的不同及關聯關係吧:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 public class AutoProperty       {           //傳統方式定義屬性必須先定義欄位來封裝           private string name;           public string Name           {               get return name; }               set { value = name; }           }           //自動屬性           public string LoginName { getset; }       }

  從代碼的字數上看傳統方式的寫法比較繁瑣,自動屬性一行代碼即可實現,然後到底這兩個功能上有什麼區別呢,這裡我用反編譯工具來看了一下(反編譯工具用的是.Net Reflector 8.3),具體效果如下:

雖然我們在寫代碼是沒有寫欄位,但是編譯器幫我們自動生成欄位,然後在每個屬性的get和set訪問器在看一下會發現

1 2 3 4 5 6 7 8 9 10 //傳統方式 public void set_Name(string value) {     value = this.name; }   public string get_Name() {     return this.name; }

  

1 2 3 4 5 6 7 8 9 10 11 12 //自動屬性 [CompilerGenerated] public void set_LoginName(string value) {     this.<LoginName>k__BackingField = value; }   [CompilerGenerated] public string get_LoginName() {     return this.<LoginName>k__BackingField; }

  使用自動屬性註意的地方:從上面代碼上可以看出來訪問器格式基本差不多,就是自動屬性訪問器上標記為編譯器生成,然後欄位也是編譯器生成的欄位。所以傳統方式和自動屬性對於編譯去來說效果是一樣的,只不過這些繁瑣的操作編譯器幫我們生成了,以減少程式員寫的代碼和讓代碼的邏輯很清晰,很簡短。

1、            對於自動實現的屬性,需要 get 和 set 訪問器。 要使該類不可變,請將 set 訪問器聲明為 private。 set accessor, you cannot use an object initializer to initialize the property." id="mt5">但是,聲明私有 set 訪問器時,不能使用對象初始值來初始化屬性。 必須使用構造函數或工廠方法。

1 2 3 4 5 6 7 8 public string CustomerId { getprivate set; } public AutoProperty(string _CustomerId)           {               this.CustomerId = _CustomerId;           }

隱式類型:可 以賦予局部變數推斷“類型”var 而不是顯式類型。 var 關鍵字指示編譯器根據初始化語句右側的表達式推斷變數的類型。 推斷類型可以是內置類型、匿名類型、用戶定義類型或 .NET Framework 類庫中定義的類型,這是微軟MSDN給出的定義,其實隱式類型簡單的理解就是程式員在聲明變數可以不用指定類型,由編譯器根據值來指定類型。2、            如果需要在屬性中有複雜的業務邏輯的話還得用傳統的屬性來實現,不管什麼東西都有它的利與弊,只要我們適當的利用即可。

理論就說怎麼多,下麵咱們直接帖代碼:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 public static void Test()           {                //傳統方式定義變數               string CustomerId = "客戶";               var NewCustomerId = "隱式類型";               var Age = 20;               var Array = new string[] {"111","222"};               object objectstring = "object";               Console.WriteLine("傳統類型:"+CustomerId+" "+"隱式類型"+NewCustomerId);   }

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

-Advertisement-
Play Games
更多相關文章
  • 首先,新建一個MVC類型的Web項目: 然後在Model文件夾下定義一個Student實體: 然後新建一個Student控制器: 創建對應的Index視圖: 相對應的_StudentList分部視圖: 編譯一下:修改路由為Student控制器,Index方法,運行,我們就可以看到結果了 然後工作中還 ...
  • 開發程式的時候經常會引用一些第三方的DLL,然後編譯生成的exe文件就不能脫離這些DLL獨立運行了。 但是,很多時候我們本想開發一款只需要一個exe就能完美運行的小工具。那該怎麼辦呢? 下文介紹一種超簡單的方法,不用寫一行代碼就可輕鬆實現。 這裡我們需要用到一款名為Fody.Costura的工具。F ...
  • Mongodb是3.2.7版本 最近在學習mongodb資料庫在網上找到的都不是2.X版本以下的,因為驅動從2.X以後修改了很多,以前不支持linq現2.X也支持了, Mongodb 啟動服務就不說了現在就來看看基本的操作 上代碼: 首先定義一個模型用來測試操作 將mongob C#driver 添 ...
  • 前幾天看了.NET的EF(Entity Framework),發現居然有這麼先進的東西,只要操作幾個類就可以完成資料庫的增刪查改,而且可以用資料庫直接導出類(DB First)、也可以用類來生成資料庫(Code First),簡直太先進了。 之前用EF做一個API服務的網站,每次要添加一條方法就要在 ...
  • 最近研究C 相關的ORC技術,圖像識別一般C和C++這種底層語言做的比較多,C 主要是依托一些封裝好的組件進行調用,這裡介紹三種身份證識別的方法。 一:調用大公司API介面,百度、雲脈,文通科技都有相關的API介紹。 二:調用圖像處理類庫,EmguCV是OpenCV的一個跨平臺的.Net封裝,該封裝 ...
  • ...
  • 目錄:ASP.NET MVC企業級實戰目錄 像www.verycd.com、博客園、淘寶、京東都有實現站內搜索功能,站內搜索無論在性能和用戶體驗上都非常不錯,本節,通過使用Lucene.Net來實現站內搜索。 演示效果預覽如下圖10-22~10-24所示。 圖10-22 圖10-23 圖10-24 ...
  • 前言 在 "上篇" 文章中介紹瞭如何在 Docker 容器中部署我們的 asp.net core 應用程式,本篇主要是怎麼樣為我們在 Linux 或者 macOs 中部署的 dotnet 程式創建一個守護進程,來保證我們的程式在異常或者是電腦重啟的時候仍然能夠正常訪問。 如果你以後用準備使用 asp ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...