C#,一些非常簡單但應該知道的知識點

来源:http://www.cnblogs.com/shouce/archive/2016/03/30/5335673.html
-Advertisement-
Play Games

1.本地變數 一看這個標題你可能會一愣,這是個什麼東東。看個小例子: static void main(){ int a=10; MyClass mc=new MyClass();} 呵呵,這裡的a與mc就是本地變數,它和欄位一樣,也保存數據。欄位通常保存和對象狀態有關的數據,而創建本地變數經常用於 ...


1.本地變數

一看這個標題你可能會一愣,這是個什麼東東。看個小例子:

static void main()
{
   int a=10;
   MyClass mc=new MyClass();
}

呵呵,這裡的a與mc就是本地變數,它和欄位一樣,也保存數據。欄位通常保存和對象狀態有關的數據,而創建本地變數經常用於保存本地或臨時數據。呵呵,簡單吧,但是它和實例欄位有何區別:

 

 

實例欄位

本地變數

生存期 從實例創建開始,直到實例不再被訪問 從它在塊中被聲明開始,到塊執行結束
隱式初始化 初始化成該類的預設值 沒有隱式初始化。如果變數在使用之前沒有被賦值,編譯器將報錯
存儲區域 由於實例欄位是類的成員,所有的欄位都存儲在堆里,無論它是指類型還是引用類型 值類型:存儲在棧里
引用類型:引用存儲在棧里,數據存放在堆里

 

2.var 關鍵字

我們知道var可以自動推斷變數的類型,如上代碼,我們可以發現在聲明開始部分提供類型名時,編譯器能從初始化語句的右邊推斷出來它的類型,所以,在聲明的開始部分包括顯示的類型名多餘的。

為了避免這種多餘,可以在聲明的開始部分的顯示類型名的位置使用新的關鍵字var。上面代碼可以改成:

static void main()
{
   var a=10;
   var mc=new MyClass();
}

 

3.值參數

使用值參數,通過將實參的值複製到形參的方式把數據傳遞給方法。方法被調用時,系統做如下操作:

    • 在棧中為形參分配空間
    • 將實參的值複製給形參

4.引用參數(ref)

    • 不會為形參在棧上分配記憶體
    • 實際情況是,形參的參數名將作為實參變數的別名,指向相同的記憶體位置
    • 實參必須是變數,在用作實參前必須被賦值。如果是引用類型變數,可以賦值一個引用或者null

5.輸出參數(out)

    • 在方法內部,輸出參數在能夠使用之前必須被賦值。這就意味著參數的初始值是不起作用的,所以沒有必要在方法調用前為參數賦值。
    • 在方法返回之前,方法內部任何路徑都必須為所有輸出參數進行一次賦值。
      如下代碼:

public void Add(out int outValue) { int var1=outValue+2; }上述代碼輸出參數在方法賦值之前被讀取將會報錯。 

6.屬性(set,get)

    • 屬性是一個函數成員
    • 它不為數據的存儲分配記憶體
    • 它可以執行代碼
    • set訪問器擁有一個單獨的隱式的值參,名稱為Value,與屬性的類型相同且擁有一個返回類型void
    • get訪問器沒有參數,擁有一個與屬性類型相同的返回類型。

7.對象初始化語句

      我們都知道創建一個對象是由new 後面跟著一個類構造函數及其參數列表組成。

對象初始化語句擴展了創建語法,在表達式的尾部放置了一組成員初始化的語句。允許我們創建新的對象實例時,設置欄位和屬性的值。

      該語法有兩種形式:一種形式是包括構造函數的參數列表,另一種是不包括。註意第一種形式可以省略圓括弧。

new  TypeName      {FieldOrProp=InitExpr,FieldOrProp=InitExpr,…}

new  TypeName      {FieldOrProp=InitExpr,FieldOrProp=InitExpr,…}

示例如下:

public static void main()

{

Point p1=new Point();

Point p2=new Point{X=4,Y=5,Z=6};

Point p3=new Point(9){X=7,Y=8};

}

public class Point

{

public int X=1;

public int Y=2;

public int Z=3;

public Point(int z) { Z=z; }

}

 

8.this關鍵字

this關鍵字在類中使用,是對當前實例的引用。它只能用在下列類成員的代碼中

  • 實例構造函數
  • 實例方法
  • 屬性和索引器的實例訪問權
    由於靜態成員不是實例的一部分,所以不能在任何靜態函數成員的代碼中使用this關鍵字。更適當的說,this用於下列目的:
  • 用於區分類的成員和本地變數或參數
  • 做為調用方法的實參

呵呵,上面這些內容我想大部分童鞋都能一下看懂,這都是些很基礎的東西,有些可能都在不知不覺中用爛了,只是沒有註意過還有個這麼個東東。所以我給總結了一些供大家參考,希望大家能有所收穫。


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

-Advertisement-
Play Games
更多相關文章
  • 1、web前臺頁面文件上傳的文件大小限制問題 1.1 通過Web.Config配置上傳文件的大小限制(涉及站點安全問題,謹慎配置!!!)。 1.2 通過後臺C#代碼進行上傳文件大小的限制。 上述兩種方法的使用可滿足不同的需求,並不是可以相互替代的解決方法。新手總結,還望讀者自行甄別使用。 2、.ne ...
  • 本博客不屬於技術貼,主要是記錄一些自己對不懂得地方的理解和學習的記錄,請帶著批判的眼光閱讀~ 值類型存儲在棧上,引用類型存儲在堆上。棧是由高到低存儲的,遵循先進後出的原則,是記憶體提前分配好的區域,記憶體的釋放不由人控制,用完後就會釋放記憶體。堆是動態分配的記憶體區域,是無序的,受人為控制釋放,但是達到一定 ...
  • MD5是一個安全的散列演算法,輸入兩個不同的明文不會得到相同的輸出值,根據輸出值,不能得到原始的明文,即其過程不可逆;所以要解密MD5沒有現成的演算法,只能用窮舉法,把可能出現的明文,用MD5演算法散列之後,把得到的散列值和原始的數據形成一個一對一的映射表,通過比在表中比破解密碼的MD5演算法散列值,通過匹 ...
  • 在做一個屬性入庫的功能,將Excel屬性數據導入到圖層要素當中,這裡Excel和SDE資料庫數據存在一個關聯欄位,通過關聯欄位值進行匹配屬性入庫。 在實際業務中,由於普查數據往往某些欄位值比較複雜,在寫入到圖層中時用戶可能做一些簡化,例如一個要素編號為0532BH001,可能錄入到圖層中只錄入BH0... ...
  • 在Windows10 UWP開發平臺上內置的XMAL佈局面板包括RelativePanel、StackPanel、Grid、VariableSizedWrapGrid 和 Canvas。在開發淘寶UWP應用時,遇到以下業務場景。 業務場景 場景一:淘寶商品提供的一些消費者保障服務 場景二:淘寶商品的 ...
  • 一個編譯的BUG,在原生的VS2015中沒有問題,但更新至VS2015 Update1之後就有了,大概是Update1用了新的編譯器,害得我好苦。經測試,VS2013 Update5中也存在這個問題,大概是用了相同的編譯器。 下麵我們來重現這個BUG,用最簡潔的代碼來重現這個BUG。 測試代碼 一個 ...
  • 刪除XML 使用方式http://localhost:8081/api/home?$format=jsonhttp://localhost:8081/api/home?$format=xml 參考資料:https://code.msdn.microsoft.com/Support-format-in ...
  • private void listbox1_MouseClick(object sender, MouseEventArgs e) { textbox1.Visible = false; textbox1.Text = lsbSearchItem.SelectedItem.ToString(); t ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...