C#學習筆記1。本站提示廣大學習愛好者:(C#學習筆記1)文章只能為提供參考,不一定能成為您想要的結果。以下是C#學習筆記1正文
1.該屬性允許訪問在啟動以後進程時在命令行上指定的順序名和任何參數。順序名可以(但不是必需)包括途徑信息。 運用 Environment.GetCommandLineArgs()辦法可檢索在字符串數組中剖析和存儲的命令行信息。
string cmd = Environment.CommandLine; Console.WriteLine(cmd);
2.decimal類型和C#的浮點類型的區別在於,decimal類型的基數是十進制的,浮點類型的基數是二進制的。一個decimal要表示成±N×10k(k次方,-28<=k<=0),其中N是96bit的一個正整數。而一個浮點數是±N×2k(k次方)的恣意數,其中N是用固定數量(float是24,double是53)的bit表示一個正整數,k是-149~+104(float)或許-1075~+970(double)的任何整數。
3.一切的string類型的數據,不論是不是字符串字面量,都是不可變的(或許說是不可修正的),例如,你不能夠將字符串“Come As You Are”更改為“Come As You Age”。也就是說,你不能修正變量最初援用的數據,只能重新對變量停止賦值,讓它指向內存中的一個新地位。
(1)可以在一個字符串後面運用@符號,指明本義序列不被處置,這樣生成後果是一個逐字字符串字面量,它不只將反斜槓當作普通字符處置,而且還會逐字解釋說有空白字符。
(2)輸入新的一行所需的字符,要運用“\r\n”這兩個字符組合,也可以運用Environment.NewLine。
Console.WriteLine(@"begin /\ / \ / \ /______\ end");
4.char支持4種格式的賦值,char 可以隱式轉換為 ushort、int、uint、long、ulong、float、double 或 decimal。 但是,不存在從其他類型到 char 類型的隱式轉換。
char[] chars = new char[4]; chars[0] = 'X'; // 字符文字 chars[1] = '\x0058'; // 十六進制 chars[2] = (char)88; // 數字轉化 chars[3] = '\u0058'; // Unicode foreach (char c in chars) { Console.Write(c + " "); } Console.WriteLine((ushort)'\x0020'); Console.WriteLine(0x2A); //在表示16進制的數字中,需求‘0x’作為前綴 Console.WriteLine("0x{0:X}", 42); //運用x或X代表把一個10進制數轉換乘16進制,大小寫決議了十六進制的顯示字母的大小方式 Console.WriteLine("\0,N"); //“\0”代表Null
5.在.Net2.0中,可以運用default()運算符來判別一種數據類型的默許值。
6.數組分為普通(一維)數組,多維數組,交織數組(可變數組,即數組的數組,交織數組要求為外部的每個數組都創立一個數組實例),其聲明方式如下。
(1)運用Length前往數組元素的總數,因而,假如你有一個多維數組,比方大小為2x3x3的cells[,,]數組,那麼Length會前往元素總數18。可運用Rank確認數組的維度,可運用GetLength(int)確認某維度的元素總數。
(2)在運用Array.BinarySearch()辦法之前,有必要對數組停止排序,假如值不升序停止排序,會前往不正確的索引。
(3)Array.Clear()辦法不會刪除數組的元素,而且不將長度設為零。數組大小是固定的不能修正,所以Clear()辦法將數組中的每個元素都設為其類型的默許值(false、0。null)。
string[] language = { "C#", "COBOL", "Java", "C++", "Visual Basic", "Pascal", "Fortran", "Lisp", "J#" }; int[,] cells = { { 1, 0, 2 }, { 1, 2, 0 }, { 1, 2, 1 } }; int[][] cells2 = new int[4][] { new int[4], new int[3], new int[2], new int[1] }; Array.Sort(language); string searchString = "COBOL"; int index = Array.BinarySearch(language, searchString); Console.WriteLine("The wave of the future, {0}, is at index {1}.", searchString, index); Console.WriteLine(); Console.WriteLine("{0,-20}{1,-20}", "First Element", "Last Element"); Console.WriteLine("{0,-20}{1,-20}", "-------------", "------------"); Console.WriteLine("{0,-20}{1,-20}", language[0], language[language.Length - 1]); Array.Reverse(language); Console.WriteLine("{0,-20}{1,-20}", language[0], language[language.Length - 1]); Array.Clear(language, 0, language.Length); Console.WriteLine("{0,-20}{1,-20}", language[0], language[language.Length - 1]); Console.WriteLine("After clearing, the array size is: {0}", language.Length); Trace.Assert(4.2f != 4.2); // Trace類提供一組辦法和屬性,協助您跟蹤代碼的執行
7.goto 語句:其將順序控制直接傳遞給標志語句。
(1)goto 的一個通常用法是將控制傳遞給特定的 switch-case 標簽或 switch 語句中的默許標簽。
(2)goto 語句還用於跳出深嵌套循環。
留意:雖然也可以在switch語句之外運用 goto ,但它們通常會形成較差的順序構造,應該用一種更容易懂的構造采取代它,還要留意的是,不能用 goto 語句從switch 語旬的內部跳到switch語句外部的一個標簽。普通來說,C#制止goto到某個東西外面,只尤許它在某個東西的內即便用,或許用於跳出某個東西。經過這個限制,C#防止了在其他言語中能夠遇到的大少數濫用goto的狀況.
static void TestGoto() { Console.WriteLine("Coffee sizes: 1=Small 2=Medium 3=Large"); Console.Write("Please enter your selection: "); int n = Console.Read(); int cost = 0; switch (n) { case 1: cost += 25; break; case 2: cost += 25; goto case 1; case 3: cost += 50; goto case 1; default: Console.WriteLine("Invalid selection."); break; } if (cost != 0) { Console.WriteLine("Please insert {0} cents.", cost); } Console.WriteLine("Thank you for your business."); Console.WriteLine("Press any key to exit."); } static void TestGoto2() { int x = 200, y = 4; int count = 0; string[,] array = new string[x, y]; for (int i = 0; i < x; i++) for (int j = 0; j < y; j++) array[i, j] = (++count).ToString(); Console.Write("Enter the number to search for: "); string myNumber = Console.ReadLine(); for (int i = 0; i < x; i++) for (int j = 0; j < y; j++) if (array[i, j].Equals(myNumber)) goto Found; Console.WriteLine("The number {0} was not found.", myNumber); goto Finish; Found: Console.WriteLine("The number {0} is found.", myNumber); Finish: Console.WriteLine("End of search."); Console.WriteLine("Press any key to exit."); }
8.按位運算符:假定有兩個數,按位運算符從最右邊的位開端,逐位停止邏輯運算,直到最左邊的位為止,一個地位處的值1會被視為 true,值0會被視為false。12與7的二進制表示為:00001100,00000111;所以假如對兩個值執行按位AND(&)運算,就會逐位比擬第一個操作數數(12)和第二個操作數(7),失掉二進制值00000100,也就是十進制的4。另外這兩個值的按位OR(|)運算後果是00001111,也就是十進制的15。按位XOR(^)後果是00001011,也就是十進制的11。其判別准繩“&”都為true才是true,“|”有一個為true才為true,“^”僅有一個為true才為true。
byte and, or, xor; and = 12 & 7;//按位運算符也可以與賦值運算契合並,如 and |= 7; or = 12 | 7; xor = 12 ^ 7; Console.WriteLine("12和7的按位運算後果,and={0},or={1},xor={2}", and, or, xor);
9.移位運算符:“<<”、“>>”用於對數字的二進制位數據停止移位。
const int size = 64; char bit; Console.Write("Enter an integer: "); var value = ulong.Parse(Console.ReadLine()); ulong mask = 1ul << size - 1;//此處mask為2的63次方,二進制就為1的前面有63個0,而ulong的最大值為2的64次方後再減1, for (int count = 0; count < size; count++) { bit = ((mask & value) > 0) ? '1' : '0';//此處mask的二進制只要第一位是1,其他為0,按位異或後,只要都是1才會大於0 Console.Write(bit); mask >>= 1; } Console.WriteLine(); Console.WriteLine("-9的二進制 {0}", Convert.ToString(-9, 2));//將32位的整數轉換為他的2進制字符串表現方式 Console.WriteLine("8的二進制無符號取反:{0}", ~(uint)8);//取反的類型為int、uint、long、ulong,按位取反運算符是對操作數的每一位取反。
10.比擬兩個數值:在比擬兩個值能否相等的時分,浮點類型(float、double)的不精確性能夠形成十分嚴重的結果。有的時分,原本應該相等的值被錯誤地判別為不相等。
decimal number1 = 4.2m; float number2 = 0.1f * 42f; double number3 = 0.1 * 42; Console.WriteLine("number1=number2 : {0}", (float)number1 == number2); Console.WriteLine("number2=number3 : {0}", number2 == number3);
11.遞增與遞加運算符的運用留意:遞增或遞加運算符的地位決議了所賦的值是操作數計算之前還是之後的值,而這會影響代碼的運作,假如希望result的值包括遞增(或遞加)計算的後果,需求將操作符放在想要遞增的變量之前。但是不論是前綴後還是後綴,變量值都會改動。
12.邏輯布爾運算符,有And(&&)、Or(||)、XOR(^)、Not(!),其中^是異或運算符,若使用於兩個布爾操作數,那麼只要在兩個操作數中僅有一個為true前提下,XOR運算符才會前往true。
13.C#預處置器指令是在編譯時調用的,預處置器指令通知C#編譯器要編譯那些代碼,並指出如何處置特定的錯誤和正告。也可以是不同平台之間的差別,比方在windows和linux中用#if區別看待不同零碎的API;預處置器指令也可以在調試中運用,比方用#if debug指令將調試代碼包圍起來。預處置器指令為 #if(#endif)、#elif、#else、#define(聲明指令)、#under(取消指令定義)、#error(指定生成錯誤)、#warning(指定生成正告)、#pragma(禁用或恢復 #warning指令)、#line(改動編譯器在報告錯誤或正告時顯示的行號)、#region(#endregion)。
14. foreach循環時期,編譯器制止修正迭代變量。
--------------------------以上內容依據《C#實質論 第三版》停止整理