1. 程式人生 > 其它 >C#易錯易混淆知識總結

C#易錯易混淆知識總結

這幾天一直在複習C#基礎知識,過程中也發現了自己以前理解不清楚和混淆的概念。現在給大家分享出來我的筆記:

一,.NET平臺的重要組成部分都是有哪些

1)FCL (所謂的.NET框架類庫)

這些類是微軟事先定義好的。

例如當我們新建立一個windows窗體應用程式是,VS會幫我們自動生成下面的程式碼:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks; using System.Windows.Forms;

這些就是微軟事先為程式設計師定義好的類庫。程式設計師可以直接使用的。

2)CLR (所謂的公共語言執行時)

建立部署.NET程式的必備環境

使用C#,F#,VB等語言都可以來建立.NET應用程式。這時候就需要一個公共語言規範,來把不同的語言解釋成.NET FramWork認識的東西。

二,什麼是程式集

程式集主要有MSIL組成(所謂的微軟中間語言,主要由dll檔案組成)

不同程式語言程式被.NET FrameWork編譯成程式集(dll檔案),當程式需要被執行時,通過CLR中的JIT(及時編譯器)編譯成原生代碼,並將指令傳送給CPU執行。

程式集一般有兩種:.dll和.exe檔案(但是不是所有的dll和exe都叫程式集)

比如:我們在同一個解決方案下,建立多個應用程式或者類庫檔案。這些程式或者類庫編譯後就會變成不同的程式集。他們之間是相互獨立的。之間如果想要相互訪問,需要新增引用。

三,Parse轉換和Convert轉換的區別

1)Parse轉換

①Parse轉換隻能轉換字串

②自變數是指定的資料型別才可以轉換成功

2)Convert轉換

①可以轉換其他型別(如:類)

②與Parse的區別就是,轉換前會對被轉換的物件進行判斷,如果物件為null則會轉換失敗

 3)TryParse轉換

 //
        // 摘要:
        
// 將數字的字串表示形式轉換為它的等效 32 位有符號整數。一個指示轉換是否成功的返回值。 // // 引數: // s: // 包含要轉換的數字的字串。 // // result: // 當此方法返回時,如果轉換成功,則包含與 s 中所包含的數字等效的 32 位無符號整數值;如果轉換失敗,則包含零。如果 s 引數為 null 或 System.String.Empty、格式不正確,或者表示的數字小於 // System.Int32.MinValue 或大於 System.Int32.MaxValue,則轉換失敗。該引數未經初始化即被傳遞。 // // 返回結果: // 如果成功轉換了 s,則為 true;否則為 false。 public static bool TryParse(string s, out Int32 result);

型別轉換分為顯式轉換和隱式轉換,兩種轉換必須都要滿足要轉換的兩個物件的性質必須相容,若是小的轉大的(如int轉double)為隱式轉換,若大的轉小的(double轉int)為顯示轉換,要滿足語法【(轉換的型別)要轉換的內容】,這是針對兩個物件相容的情況,若不相容,則convert.toint,double.....】(要轉換的內容)如(string轉int大的轉小的)若string中包含除數字以外的東西的話,則會報錯,其本質是呼叫int.parse方法,所以效率會稍微低點兒,但是int[double,decimal,char].tryparse[要轉換的內容,out ***(result)]不會報錯,若成功轉換,將值給物件,返回true,若不能,返回false,並且有一個方法內部預定義的值。

四,資料型別的儲存位置

1)儲存在棧中的資料型別

所有數值型別,char,bool,列舉,結構體

2)儲存在堆中

string,陣列,類

管這些型別,他們的變數的宣告都是儲存在棧裡,真實的物件儲存在堆裡面,棧裡面的變數儲存打的是物件的地址。

下面以陣列來簡單說一下這個問題:

//宣告一個一維陣列
            int[] arr = new int[4];

那麼這個表示式的執行順序是什麼呢?

①首先程式會在棧中開闢一段名為arr的int[]型別的空間

②然後在堆中開闢一個int[]物件,再該物件中會有4塊連續的記憶體空間

③堆中的物件返回型別為地址,即new  int[4]表示式返回的是地址

示意圖如下:

 五,C#方法呼叫

1)帶預設引數的方法,預設值必須放在最右側

下面的寫法編譯器會報錯