目錄
一、C# 介紹
1.1 托管代碼(Manage Code ) :
1.2 基礎類型庫 (Base Class Library):
1.3?程序集(Assembly):
1.4 .NET 框架:
1.5?公共中間語言(Common Intermediate Language),簡稱 IL。
1.6?C#編譯器將源代碼編譯成CIL,從而生成程序集。
1.7 公共語言運行時 (Common Language Runtime ),簡稱 CLR。
1.8?所有依賴.NET框架的應用程序都需要CLR,CLR 實現如下功能:
1.9?.NET框架:
1.10 .NET FRAMEWORK 4.8: ?
二、Hello World
三、基本類型
3.1 整數類型
3.1.1?整數數據
3.1.2?在指定數據類型時使用C#關鍵字而不是BCL名稱。?
3.2 浮點類型
3.2.1?浮點類型?
3.2.2?與浮點數不同,decimal類型保證范圍內的所有十進制數都是精確的。例如,0.1M 就是精確值,而不是一個近似值。
3.3 字面量
3.3.1?字面量(Literal value) :源代碼中的常量值
?3.3.2?默認情況下,輸入帶小數點的字面量,編譯器會自動把它解釋為double 類型,整數值通常默認為int,如果值太大,編譯器將把它解釋為long,例如:
3.3.3 整數字面量解析
3.4?布爾及字符類型
3.4.1?布爾類型
3.4.2 字符類型
3.4.3?字符類型的字面兩是用單引號括起來的,如:’A’
3.4.4?可以使用4位十六進制的Unicode值 、帶有強制類型轉換的整數值、或十六進制表示他們
3.4.5 字符類型:轉義字符
?3.4.6?字符串類型
3.5 字符串字面量
3.5.1?字符串字面量必須放在雙引號(“)中, 可以包含Unicode 和轉義字符。
3.5.2?在C#中,可以在字符串前使用@符號,指明轉義序列不被處理,結果是一個逐字字符串字面量,它不僅能將反斜杠當作普通字符處理, 也能逐字解釋所有空白字符。 例如:
3.6?字符串插值
3.6.1 字符串插值使得字符串可以支持嵌入表達式。字符串插值語法在一個字符串字面量前面加上一個$符號前綴,然后將表達式嵌入大括號中, 例如:
3.6.2 字符串字面量也可以在”@”符號前面加上”$”符號的字符串插值而成,例如:
3.6.3?string 類常用靜態方法
3.6.4?字符串的不可變性
四、其它介紹
4.1?using 和 using static 指令
4.1.1 using 指令有以下種用途
4.1.2 using static 指令訪問類型的靜態成員以及嵌套類型而不需要指定類型名。
4.2?隱式類型的局部變量
4.3?值類型和引用類型
4.3.1 C# 中數據類型分為兩類?
4.3.2?值類型
4.3.3 引用類型
4.4?null
4.5?顯式數據類型轉換
4.6?不使用轉型操作符的轉換
一、C# 介紹
1.1 托管代碼(Manage Code ) :
????????依賴于.NET 框架,在CLR(Common Language Runtime ) 管理下運行的代碼
1.2 基礎類型庫 (Base Class Library):
????????BCL 是公共語言基礎標準庫Common Language Infrastructure (CLI)之一,它提供了內建的數據類型表示、基本文件訪問,自定義屬性,格式化、安全屬性、 I/O 流、字符串操縱等功能, 例如:System.Int32 , System.String
1.3?程序集(Assembly):
????????NET庫和可執行文件稱為程序集,程序集是編譯好的,面向.NETFRAME的代碼的邏輯單元。
????????程序集中包含的元數據描述了對應代碼中定義的類型和方法。程序集也包含描述自身的程序集元數據,這種元數據包含在一個稱為“清單”(manifest) 的區域中。
1.4 .NET 框架:
????????.NET 所有程序集的集合。
1.5?公共中間語言(Common Intermediate Language),簡稱 IL。
1.6?C#編譯器將源代碼編譯成CIL,從而生成程序集。
1.7 公共語言運行時 (Common Language Runtime ),簡稱 CLR。
1.8?所有依賴.NET框架的應用程序都需要CLR,CLR 實現如下功能:
- CLR 在程序運行時將IL 編譯成本地代碼。 這個過程稱為即時編譯( JIT)
- 帶有類型加載器的類型系統,類型加載器負責從程序集中加載類型,類型系統負責驗證是否允許使用某些類型
- 垃圾回收器
- 線程處理
1.9?.NET框架:
1.10 .NET FRAMEWORK 4.8: ?
- 在目錄 %windows%\Microsoft.NET\Framework\v4.0.30319下可以找到框架的庫及CLR。
- 可用于.NET Framework的類組織在System名字空間中。?
二、Hello World
using System;
class Program
{static void Main(){Console.WriteLine("Hello World!");}
}
ILDASM
????????對程序集執行反匯編,顯示C# 編譯器生成的CIL代碼。
三、基本類型
3.1 整數類型
3.1.1?整數數據
3.1.2?在指定數據類型時使用C#關鍵字而不是BCL名稱。?
3.2 浮點類型
3.2.1?浮點類型?
3.2.2?與浮點數不同,decimal類型保證范圍內的所有十進制數都是精確的。例如,0.1M 就是精確值,而不是一個近似值。
3.3 字面量
3.3.1?字面量(Literal value) :源代碼中的常量值
?3.3.2?默認情況下,輸入帶小數點的字面量,編譯器會自動把它解釋為double 類型,整數值通常默認為int,如果值太大,編譯器將把它解釋為long,例如:
- Console.WriteLine(1.618033988749895); ? ? // 1.61803398874989
- Console.WriteLine(1.618033988749895M);? ?// 1.618033988749895M
3.3.3 整數字面量解析
- 沒有后綴的字面量按照 int, uint, long, ulong 的順序,解析成能夠存儲該值的類型
- 具有后綴U的數值按照 uint, ulong 的順序,解析成能夠存儲該值的類型
- 具有后綴L的數值按照 ?long, ulong 的順序,解析成能夠存儲該值的類型
- 如果字面量的后綴是UL 或者LU,則解析成ulong 類型
3.4?布爾及字符類型
3.4.1?布爾類型
3.4.2 字符類型
3.4.3?字符類型的字面兩是用單引號括起來的,如:’A’
3.4.4?可以使用4位十六進制的Unicode值 、帶有強制類型轉換的整數值、或十六進制表示他們
如: ‘\u0041’ ? ? (char)65 ? ? ? ?‘\x0041’?
3.4.5 字符類型:轉義字符
????????轉義字符也能表示一個字符類型的字面量
?3.4.6?字符串類型
using System;
Class Program
{static void Main(){string s1 = "A string";Console.WriteLine("s1 is" + s1); }
}
3.5 字符串字面量
3.5.1?字符串字面量必須放在雙引號(“)中, 可以包含Unicode 和轉義字符。
????????例如:string filename = “C:\\Prosharp\\Helloworld.cs”;
3.5.2?在C#中,可以在字符串前使用@符號,指明轉義序列不被處理,結果是一個逐字字符串字面量,它不僅能將反斜杠當作普通字符處理, 也能逐字解釋所有空白字符。 例如:
3.6?字符串插值
3.6.1 字符串插值使得字符串可以支持嵌入表達式。字符串插值語法在一個字符串字面量前面加上一個$符號前綴,然后將表達式嵌入大括號中, 例如:
????????Console.WriteLine($"Your ?full name is {firstName} {lastName}");
3.6.2 字符串字面量也可以在”@”符號前面加上”$”符號的字符串插值而成,例如:
using System;
Class Program
{static void Main(){string s1 = "Hello World!";Console.WriteLine($@"The string is: {s1}"); }
}
3.6.3?string 類常用靜態方法
3.6.4?字符串的不可變性
????????string 類型的關鍵特性在于它的不可變性(immutable).可以為string 變量賦一個全新的值,但出于性能考慮,沒有提供修改字符串內容的機制,例如:?
四、其它介紹
4.1?using 和 using static 指令
4.1.1 using 指令有以下種用途
- 允許使用命名空間的類型而不需要指定命名空間的名字,例如:using System.text; ?
- 允許創建一個類型或命名空間的別名,例如:using Project = PC.MyCompany.Project;
4.1.2 using static 指令訪問類型的靜態成員以及嵌套類型而不需要指定類型名。
????????例如:using static System.Math;
4.2?隱式類型的局部變量
????????var 用來聲明隱式類型的局部變量。編譯器根據聲明時初始化語句推斷數據類型
4.3?值類型和引用類型
4.3.1 C# 中數據類型分為兩類?
- 值類型
- 引用類型
4.3.2?值類型
- 值類型存儲在棧(即堆棧stack)中
- 除string 外,基本數據類型都是值類型
4.3.3 引用類型
- 引用類型存儲在托管堆中
- 引用只復制對數據的引用,所以兩個不同變量可引用相同的結構,
- 例如string s1= “hello world”; ? ? ? ?
- string s2 = s1; ?
- 大多數復雜的c#類,包括用戶自定義類型,都是引用類型
- 如果希望用戶自定義類型為值類型,需要聲明成結構
- 一般引用類型需要使用new 操作符從堆上分配對象
4.4?null
- null值由關鍵字null標識,表明變量不引用任何有效對象,null值只能賦給引用類型,指針類型,可空值類型。 例如:string faxNumber = null; ?
- 一般不能把 null賦給 值類型,因為值類型不能包含引用。但是從C# 2.0開始,允許使用可空修飾符?聲明可存儲null 的變量, 例如:
- int ?count = null; ? ? ? ?
- ?// …………. ? ? ? ?
- if (count == null) ? ? ? ? ?
- // …………….
4.5?顯式數據類型轉換
- C# 中,可以使用轉型操作符執行轉型,通過在圓括號中指定希望變量轉換成的類型。轉換可能丟失精度和數據,例如:
- long longNumber = 50918309109;?
- int ? intNumber = (int)longNumber;
- C# 提供了特殊關鍵字checked/unchecked 標識代碼塊, 如果代碼塊中發生數據溢出,checked 將使得程序拋出異常,如:
- 不存在從數值類型到bool的有效轉換
4.6?不使用轉型操作符的轉換
????????每個數據類型都包含一個Parse() 方法,它允許將字符串轉換成對應的數值類型,例如:
string text = "9.11E-31";float kgElectronmass = float.Parse(text);
????????System.Convert 也能將一種類型轉換為另一種類型,但是它只支持小的數據類型,而且是不可擴展的。它允許從 char, sbyte, short, int, long, ushort, uint, ulong, float, double, decimal, DateTime 和string 類型中的一種轉換到另一種類型
string middleText = "261.626";
double middle = System.Convert.ToDouble(middleText);
bool isMiddle = System.Convert.ToBoolean(middle);
????????所有類型都支持ToString 方法 輸出一個類型的字符串表示,例如:
bool isMiddle = true;
string text = isMiddle.ToString(); // text = True;