基本資料型別##
C#支持完整的BCL(基類別庫)名字,但是最好都統一使用關鍵字進行使用與開發,比如使用int而不是System.Int32,以及使用string型別時候應當使用string而不是Systen.String以及String,
作為一名擁有良好撰寫習慣的程式員,要一致!不要變來變去!
整數型別###
C#有八種整形:

浮點型別###
C#包含以下兩類浮點浮點型別:

浮點數精度可變,我們應該清楚一件事情就是,計算機在底層存盤我們資料時都采用二進制方式進行存盤,那么也說明二進制浮點型別無法精確我們所想要表達的數,我們還需要記住的是,浮點數精度由有效位數的個數決定,而不是由一個固定值決定,
decimal型別###

這一個型別存在的意義就是保證范圍內所有的十進制數都是精確的,所表示的數值就是本身,0.114514就是0.114514,不是一個近似值,
凡事都是需要取舍的,雖然decimal型別擁有極高的精度,但是它的所能表示的范圍更小,從浮點型別轉換為decimal型別就會可能出現溢位錯誤,
此外,decimal型別的計算速度稍慢,(小幅度,可忽略)
字面值###
字面值表示源代碼中的固定值,
System.Console.WriteLine(114514)
System.Console.WriteLine(1.114514)
直接將值放到源代碼中稱為硬編碼,需要注意是的,每次進行值的修改,就需要重新編譯代碼,這可能會對維護造成一定的影響,
默認情況下,帶小數的字面值會被編譯器自動解釋成double型別,沒有小數且int型別范圍內的字面值則會被解釋成int型別,要是字面值太大了塞不進int,就會被解釋成long型別,
我們有時候會有一些特殊的需求,除了可以直接宣告資料型別的方式之外,我們也可以采用直接加入后綴的方式顯示宣告想要的型別:
- M或m:decimal
- D或d:double
- F或f:float
- ul或lu:ulong
- U或u:uint,ulong
- L或l:long,ulong
栗子:
System.Console.WriteLine(1.1145141919810M);
字面值當中可以使用下劃線 _ 分隔,這對于程式而言并不會產生宣告影響,但是可以方便我們閱讀,也只是好看而已,
System.Console.WriteLine(1_145_141_919_810);
十六進制字面值:
System.Console.WriteLine(0x1BF52);
上面這一串代碼執行后得到114514的內容,也就是說我們使用了十六進制的輸入方式,計算機則以十進制的方式回傳,
將數字格式化為十六進制
System.Console.WriteLine($"0x{114514:x}");
更多的資料型別##
布爾型別###
C#基元型別是Boolean或條件型別bool,bool的BCL名稱是System.Boolean,另外在存盤空間上,一個二進制位以0和1足以表示bool型別的數值,但是bool型別的實際大小是一個位元組,
字符型別###
字符型別char表示16位字符,char的大小和ushort相同(0~65535),但它是C#當中的特有型別,需要單獨對待,char的BCL名稱是System.Char,
輸入char型別的字面值需要將字符放到一堆單引號之中,例如'L',凡是使用char型別的字符,都可以用該方式存盤,
但是有些字符我們是不能夠直接輸入的,需要進行轉義處理,首先輸入反斜杠 "" 前綴,再跟上所想要特殊字符代碼,這一套下來稱之為轉義序列,例如:"\n"(換行),"\t"(制表符),"\"(反斜杠),"'"(單引號),
字串###
零或多個字符就成了字串,string是C#的基本字串型別,BCL名稱是System.String,
首先先說明@和$的作用:
- @:逐字,指名轉義序列不被處理,(也就是說明一個字串當中不再出現轉義內容)
- $:插值,字串插值,從C#6.0開始所支持的插值技術表示式,
注意逐字和插值可同時使用,但是需要先指定$,再指定@,例如:
System.Console.WriteLine($@"My name is {firstname}{lastname}.");
字串插值內部作業原理:
字串插值呼叫了string.Format()方法的語法糖(可讀性高并且能夠保持代碼性能):
System.Console.WriteLine($"Your name is {firstname}{lastname}.");
會被轉化成以下代碼:
object[] args = new object[] {firstname,lastname};
Console.WriteLine(string.Format("Your name is {0}{1}."),args);
字串插值在幕后編譯成CIL后都會使用string.Format(),
字串方法
string型別也提供了對應的方法進行字串操作,
string的靜態方法:
string.Format():字串插值
string text = string.Format("Your name is {0}{1},",firstname,lastname);
string.Concat():字串連接
string text = string.Concat(first,lastname);
string.Compare(string str0,string str1,bool flag):字串比較,第三個引數為是否不區分大小寫比較,
int result = string.Comcare("Yes","yes");
string的實體方法:
需要創建出對應的物件,之后物件進行方法的呼叫,以下只列出對應的方法,不再進行代碼實體,
- bool StartWith(string value);
- bool EndWith(string value);
- string ToLower();
- string ToUpper();
- string Trim();
- string TrimEnd();
- string TrimStrart();
- string Replace();
using 和 using static指令,呼叫靜態方法需要附加命名空間和型別名前綴,可以使用這類指令避免這些前綴,例如:System.Console.WriteLine()方法,只要在namespace宣告之前加上using static System.Console;指令,就可以在方法中直接參考WriteLine()方法,using 和 using static的區別在于,using static方法只能夠作用域靜態成員,而using指令能夠作用全部成員,
換行符也有講究,Windows的換行符是 \r 和 \n 兩個字符的組合,UNIX則是單個\n,為了能夠跨平臺,可以使用
System.Console.WriteLine("♂");
自動輸出換行符,則一陳述句和以下陳述句等價
System.Console.Write("♂" + System.Environment.NewLine);
以上兩條陳述句在windows上等價于
System.Console.Write("♂\r\n");
總之為了避免跨平臺的兼容性問題,應該盡量避免單獨使用\n來進行換行操作,多依靠System.Console.WriteLine()和System.Environment.NewLine()來實作換行操作,
字串長度,判斷字串長度可以使用string的Length成員,它是只讀屬性,并不是一個方法,所以并不需要它后面增加括號,屬性內容后文會進行詳細的講述,示例代碼:
string text = "deep dark fantastic";
System.Console.WriteLine(text,Length);
字串不可變,這就意味著字串為參考型別,當我們指定了一個新的字串的內容后,字串都參考該內容,當我們需要對字串進行更改,只能在其他記憶體位置新建字串內容,字串參考新的字串內容,而舊的內容若沒有其他字串變數參考則會垃圾回收,
System.Text.StringBuilder型別,這一個型別適合用于經歷多個步驟來構造一個長字串,它與string的區別在于,StringBuilder的方法會修改本身的資料,而string是回傳一個新的字串,
null和void###
null可直接賦給字串變數,表明為空,不指向任何變數,null只能賦值給參考型別,指標型別和可空值型別,值得注意的是null值于""值是兩個概念,null表示不指向任何變數,而""表示指向了記憶體位置中存在一個空值的位置,這個空值是真實存在的,
voidvoid本質上不是資料型別,它只是指出沒有資料型別這一事實,告訴計算機不要指望回傳什么,
資料型別轉換###
C#存在過多的型別,型別之間的互相轉換是很重要的,所以交換自檢的常見操作就是轉型或強制型別轉換,
高精度的變數向低精度的變數轉換,long向int轉換,這一類可能會造成資料丟失,這就需要用到顯示轉換,反過來,不會造成資料丟失,而且不會例外的任何轉換成為隱式轉換,
顯示轉換就相當于在和計算機說,我曉得我在干啥,放心去做吧,然后計算機就照著你的意思去做了,明確指出,所以稱之為顯示轉換,
C#提供了特殊關鍵字來表示代碼塊,會檢查是否出現溢位,
class Program{
static void main(){
checked{
int n = int.MaxValue;
n = n + 1;
System.Console.WriteLine(n);
}
}
}
上述代碼在運行時發生賦值溢位將引發例外,
unchecked則是強制不進行溢位檢查,塊內溢位不會引發例外,即便是開啟了checked選項,unchecked關鍵字也會阻止“運行時”引發例外,
不使用轉型運算子的型別轉換,我們需要把一個字串里面的數值變成我們想要的數值型別時,可以用到Parse()這樣的方法來,每個資料型別都有Parse()方法,能夠把字串轉化成對應的數字型別,
string text = "114514";
float t1 = int.Parse(text);
System.Convert可以把一種型別轉化成另一種型別,但是該方法只支持少量型別,且不可擴展,這里不詳細說,
還有一個值得注意的地方:所有型別都支持ToString()方法,可提供型別的字串表示,
TryParse(),這個靜態方法在C# 2.0開始所有的基元數值型別都包含,于Parse()用法很接近,但是轉換失敗不會引發例外,而是回傳false,這里不細說,
小結##
狠下心來系統的、全面的將C#學習一邊,即便是以前寫過一些C#專案,回頭看這些知識點還是感覺像是學到了新的東西一樣,當然也是不想像之前一樣感覺語言寫著寫著覺得好陌生,也為了今后開發unity能夠在腳本實作上少繞更多的彎,
現在多踩踩坑總歸是好的,
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/107276.html
標籤:C#
上一篇:Log4基本配置
下一篇:最近上傳圖片上傳檔案報413錯誤及僅Https下報413問題,IIS高版本的配置方案及Web.config配置全解
