黑馬程序員C學習筆記_第1頁
黑馬程序員C學習筆記_第2頁
黑馬程序員C學習筆記_第3頁
黑馬程序員C學習筆記_第4頁
黑馬程序員C學習筆記_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、黑馬程序員C#學習筆記  錯誤的理解希望能夠得到大家的指正,謝謝!/*實現了IDisposable接口的所有的對象在使用完以后要進行Dispose()資源的釋放,可以使用using()進行資源管理*/創(chuàng)建連接是非常耗時的,因此不要每次操作都創(chuàng)建連接。SQL語句中的關鍵字應該大寫。/1個數據庫能夠承載的連接是有限的,所以SqlConnection在程序中不能一直保持Open。/對于數據庫來說,連接是最寶貴的資源,用完了以后一定要Close、Dispose。/ 類是對象的抽象,而對象是類的具體實例。類是抽象的,不占用內存,而對象是具體的,占用存儲空間。/元數據:用于描述要素、數據集或數據

2、集系列的內容、覆蓋范圍、質量、管理方式、數據的所有者、數據的提供方式等有關的信息。元數據最本質、最抽象的定義為:data about data(關于數據的數據)。它是一種廣泛存在的現象,在許多領域有其具體的定義和應用。/元數據在軟件構造領域定義:在程序中不是被加工的對象,而是通過其值的改變來改變程序的行為的數據。它在運行過程中起著以解釋方式控制程序行為的作用。在程序的不同位置配置不同值的元數據,就可以得到與原來等價的程序行為。 .NET Framework基礎類型:.NET所有類型都繼承自System.Object。C#類型體系包含兩種類型:值類型,引用類型。值類型繼承自System

3、.ValueType。而System.ValueType繼承自System.Object。指針:在信息工程中指針是一個用來指示一個內存地址的計算機語言的變量或中央處理器(CPU)中寄存器(Register)。指針一般出現在比較近機器語言的語言,如匯編語言或C語言。在使用一個指針時,一個程序既可以直接使用這個指針所存儲的內存地址,又可以使用這個地址里存儲的變量或函數的值。寄存器:寄存器是中央處理器內的組成部分。寄存器是有限存儲容量的高速存儲部件,它們可用來暫存指令、數據和位址。寄存器擁有非常高的讀寫速度,所以在寄存器之間的數據傳送非???。C#中使用指針:為了保持類型安全,默認情況下C#不支持指針

4、運算。不過可以通過使用unsafe關鍵字來定義允許使用指針的不安全上下文。C#中的不安全代碼不一定是危險的,只是其安全性無法由CLR進行驗證。編譯不安全代碼時需要使用csc /unsafe *.cs。class Program unsafe static void Method(int* parameter)/聲明一個int類型的指針 *parameter += *parameter;/指針相加 unsafe static void Main() int parameter = Convert.ToInt32(Console.ReadLine(); Method(&parameter)

5、; Console.WriteLine(parameter); Console.ReadKey(true); 值類型:值類型直接存儲值一種由類型的實際值表示的數據類型。如果向一個變量分配值類型,則該變量將被賦以全新的值副本。C#中的值類型包括結構類型和枚舉類型兩大類以及byte、int、long、float、double、char、boolean。引用類型:引用類型存儲的是對值的引用由類型的實際值引用表示的數據類型。如果為某個變量分配一個引用類型,則該變量將引用(或"指向")原始值,不會創(chuàng)建副本。引用類型包括類、接口、委托和裝箱值類型。C#有兩個內置的引用類型:object

6、類型和string類型。常量與變量:常量:常量又叫常數,主要用來存儲在程序運行的過程中值不會改變的數據。常量被聲明為字段,通過const關鍵字聲明,常量必須在聲明時賦值。變量:變量是指在程序運行的過程中值可以改變的數據。數據類型轉換:顯示類型轉換:顯示類型轉換是將高精度數值轉換為低精度數值,必須指明將要轉換的目標類型。由于數據類型的差異,有可能丟失部分數據。隱式(自動)類型轉換:隱式類型轉換又稱自動類型轉換,是將低精度數值轉換為高精度數值,可以直接賦值而不用指明將要轉換的目標類型。進制轉換:int i = 10;Console.WriteLine("十進制轉二進制:"+Co

7、nvert.ToString(i, 2);Console.WriteLine("十進制轉八進制:"+Convert.ToString(i, 8);Console.WriteLine("十進制轉十六進制:"+Convert.ToString(i, 16);Console.WriteLine("二進制轉十進制:"+Convert.ToInt32("1010",2);Console.WriteLine("八進制轉十進制:"+Convert.ToInt32("10",8);Conso

8、le.WriteLine("十六進制轉十進制:" + Convert.ToInt32("a",16);Console.ReadKey(true);C#中運算符的使用:算術運算符:+、-、*、/、%Console.WriteLine(10 +0.5+.5);/"+"運算符用于兩個數值相加,當其中一個或兩個操作數都是字符或字符串時,表示相連Console.WriteLine("10" + 5);Console.WriteLine('a' + "10");int i = -10;Con

9、sole.WriteLine(-i);/"-"運算符可以是一元運算符也可以是二元運算符Console.WriteLine(10 - 0.5 - .5);/一元運算符表示只用一個參數的運算,二元運算符表示符號左右兩邊用到了兩個參數Console.WriteLine(10 * i);/"*"運算符用于計算操作數的積Console.WriteLine(double)6 / 25);/"/"運算符用于計算操作數的商Console.WriteLine(100 % 6);/"%"運算符用于計算操作數的余數Console.Rea

10、dKey(true);賦值運算符:=、+=、-=、*=、/=、%=、?int i = 100;/"="運算符表示將右邊的值賦給左邊的變量或常量i += 10;/"+="運算符等同于 i=i+10i -= 10;/"-="運算符等同于 i=i-10i /= 10;/"/="運算符等同于 i=i/10i *= 10;/"*="運算符等同于 i=i*10i %= 3;/"%="運算符等同于 i=i%10Console.WriteLine(i);int? x = null;/int?

11、 可空類型,表示一個可能是空,也可能是int的結構int y = x ? 10;/如果x是null,則y=10,否則y=xConsole.WriteLine(y);Console.ReadKey(true);關系運算符:=、!=、>、<、>=、<=、關系運算符用于實現對兩個值的比較運算,關系運算符在完成對兩個操作數的比較運算后會返回一個代表運算結果的布爾值。bool result = 2 = 1;Console.WriteLine(result);Console.WriteLine(2 != 3);Console.WriteLine(5 > 6);Console.

12、WriteLine(6>=5);Console.ReadKey(true);邏輯運算符:&&、|、!Console.WriteLine(true|false);/邏輯或運算,運算符左右有一個true則結果為true,否則為falseConsole.WriteLine(true && false);/邏輯與運算,運算符左右有一個false則結果為false,否則為trueConsole.WriteLine(!true);/邏輯非運算,對布爾值取反Console.ReadKey(true);條件運算符:?:static void Main(string arg

13、s) Console.Write("用戶名:"); string userName = Console.ReadLine(); Console.Write("密碼:"); string password = Console.ReadLine(); bool result = (userName = "admin" && password = "admin"); string strInfo = result ? "登錄成功!" : "登錄失敗!"/result

14、為true時就把"登錄成功!"賦給strInfo Console.WriteLine(strInfo); Console.ReadKey(true);移位運算符:<<、>>左移位運算:按二進制形式把所有的數字向左移動對應的位數,高位移出(舍棄),低位的空位補零。在數字沒有溢出的前提下,對于正數和負數,左移n位就相當于乘以2的n次方。右移位運算:按二進制形式把所有的數字向右移動對應的位數,低位移出(舍棄),高位的空位補符號位,即正數補零,負數補1。對于正數和負數,右移n位就相當于除以2的n次方。class Program static void Mai

15、n(string args) /1111111111111111111111111111111111111111111111111111111110011100 << 3 /=1111111111111111111111111111111111111111111111111111110011100000 (-100 << 3 = -800) /0000 1100 1000 >> 3=0000 0001 1001 (200 >> 3 = 25) int one = -100, two = 200; int temp = one << 3

16、;/將變量one的值左移3位。 Console.WriteLine("-100 << 3 = " + temp.ToString(); temp = two >> 3;/將變量two的值右移3位。 Console.WriteLine("200 >> 3 = " + temp.ToString(); Console.ReadKey(true); is 運算符:is運算符用于檢查變量是否為指定的類型,如果是返回true,否則返回false。class Program static void Main(string args

17、) int i = 10; bool result = i is int;/判斷變量 i 是否為整型 Console.WriteLine(result.ToString(); Console.ReadKey(true); 枚舉類型:class Program enum 功夫 /使用enum創(chuàng)建枚舉 降龍十八掌 = 0, 如來神掌 = 1, 葵花寶典 = 2, 九陽神功 = 3, 獨孤九劍 = 4, 太極拳 = 5 static void Main(string args) Console.WriteLine("小子,我看你骨骼驚奇,必是練武奇才,將來維護宇宙正義與和平的重任就交給你了

18、!"); int 學習 = 0; if (學習 > 5 | int.TryParse(Console.ReadLine(),out 學習)=false) Console.WriteLine("你什么也沒有學會!"); else switch (學習) case (int)功夫.降龍十八掌: Console.WriteLine("你學會了降龍十八掌!"); break; case (int)功夫.如來神掌: Console.WriteLine("你學會了如來神掌!"); break; case (int)功夫.葵花寶典:

19、 Console.WriteLine("你學會了葵花寶典!"); break; case (int)功夫.九陽神功: Console.WriteLine("你學會了九陽神功!"); break; case (int)功夫.獨孤九劍: Console.WriteLine("你學會了獨孤九劍!"); break; case (int)功夫.太極拳: Console.WriteLine("你學會了太極拳!"); break; default: Console.WriteLine("你什么也沒有學會!"

20、); break; Console.ReadKey(true); Char類的使用:class Program static void Main(string args) char a = 'a', b = '8', c = 'L', d = '.', e = ' ', f = ' ' Console.WriteLine("IsLetter方法判斷a是否為字母:0", Char.IsLetter(a); Console.WriteLine("IsDigit方法判斷b是否

21、為數字:0", Char.IsDigit(b); Console.WriteLine("IsLetterOrDigit方法判斷c是否為字母或數字:0", Char.IsLetterOrDigit(c); Console.WriteLine("IsLower方法判斷a是否為小寫字母:0", Char.IsLower(a); Console.WriteLine("IsUpper方法判斷c是否為大寫字母:0", Char.IsUpper(c); Console.WriteLine("IsPunctuation方法判斷d是

22、否為標點符號:0", Char.IsPunctuation(d); Console.WriteLine("IsSeparator方法判斷e是否為分隔符:0", Char.IsSeparator(e); Console.WriteLine("IsWhiteSpace方法判斷f是否為空白:0", Char.IsWhiteSpace(f); Console.ReadKey(true);  流程控制語句:選擇結構:if(boolean )語句塊 else語句塊switch(表達式)case 常量表達式:語句塊 break;default:語句

23、塊 break;循環(huán)結構:while(boolean)語句塊 、do語句塊while(boolean)for(聲明int類型變量并賦值;判斷產生循環(huán)的條件;要循環(huán)的表達式)語句塊foreach(類型 循環(huán)變量名 in 集合)語句塊跳轉語句:break(終止循環(huán))語句只能應用在switch、while、do.while、for或foreach語句中,break語句應用于循環(huán)作用域中。continue(忽略本次循環(huán),繼續(xù)下次循環(huán))語句只能應用于while、do.while、for或foreach語句中,continue語句應用于循環(huán)作用域中。goto語句用于將控制轉移到由標簽標記的語句。goto

24、標簽; 標簽: 語句塊return語句用于終止當前執(zhí)行的方法、可以有返回值。數組:一維數組:int arr;/*聲明數組*/*初始化數組*/ int arr = new int5;/*表示數組長度是5*/int arr = 1, 2, 3 ;int arr = new int 1, 2, 3;二維數組:int, arr;/*聲明數組*/*初始化數組*/int, arr1 = new int3, 3;int, arr2 = new int2,2 1,2,3,4;static void Main() int, arr = new int, 1, 3 , 2, 4 , 5, 7 , 6, 8 ; C

25、onsole.Write("數組的行數:" + arr.GetLength(0);/輸出二維數組的行數 Console.Write("t數組的列數:" + arr.GetLength(1);/輸出二維數組的列數 Console.WriteLine(); Console.WriteLine("循環(huán)輸出數組中的元素:"); for (int y = 0; y < arr.GetLength(1);y+ ) Console.Write("t第" + y + "列"); Console.Write

26、Line(); for (int i = 0; i < arr.GetLength(0);i+ )/遍歷二維數組 string str = "" for (int x = 0; x < arr.GetLength(1);x+ ) str = str + Convert.ToString(arri, x)+"t" Console.WriteLine("第"+i+"行: "+str); Console.ReadKey(true);ArrayList:動態(tài)數組,可以動態(tài)的添加和刪除元素。ArrayList的容

27、量可以根據需要自動擴充,只能是一維的形式。class Program static void Main() int arr = new int 1, 2, 3, 4, 5, 6 ; Array.Reverse(arr);/反轉整個一維數組中元素的順序 foreach (int i in arr) Console.Write(i); Console.WriteLine(); ArrayList list = new ArrayList(arr);/實例化ArrayList動態(tài)數組并賦初值 list.Add("你好!");/增加數據到動態(tài)數組中 list.AddRange(ar

28、r);/添加集合到動態(tài)數組的末尾 Console.WriteLine(list.Contains(5);/判斷指定元素是否在數組中 Console.WriteLine(list.IndexOf(5);/輸出指定元素在數組中的索引位置,如果沒有找到輸出-1 list.Insert(0, "Hi!");/插入數據到指定的位置 list.Remove("你好!");/"你好!"被看做是一個元素,根據元素內容移除一個指定的元素 list.RemoveAt(1);/根據元素的索引移除一個指定的元素 list.RemoveRange(1, lis

29、t.Count - 1);/移除指定范圍內的所有元素 foreach (object obj in list) Console.Write(obj); list.Clear();/移除所有元素 Console.ReadKey(true); 哈希表Hashtable:散列表也叫哈希表。它表示鍵/值(key,value)對的集合。class Program static void Main() Hashtable htable = new Hashtable();/實例化Hashtable對象 htable.Add(1, "你好!");/向哈希表中添加元素 htable.Add

30、(2, "很好!"); for (int i = 0; i <= htable.Count;i+ ) Console.Write(htablei); Console.WriteLine(); htable.Remove(1);/移除元素的鍵 Console.WriteLine(htable2);/輸出哈希表中指定鍵的值 htable.Clear(); htable.Add("姓名", "張耕明"); htable.Add("年齡", 26); Console.WriteLine("t鍵t值"

31、;); foreach (DictionaryEntry dicEntry in htable) Console.WriteLine("t" + dicEntry.Key + "t" + dicEntry.Value); Console.WriteLine(htable.ContainsKey("姓名");/判斷哈希表中是否包含指定的鍵 Console.WriteLine(htable.ContainsValue("張耕明");/判斷哈希表中是否包含指定的值 Console.ReadKey(true); 靜態(tài)和非靜

32、態(tài):static class 靜態(tài)類/靜態(tài)類不能實例化,只能包含靜態(tài)成員和靜態(tài)方法,靜態(tài)成員或方法只能由類來訪問 private static string _str; static 靜態(tài)類()/靜態(tài)構造函數不能帶有參數,不能有訪問修飾符,在調用類成員時執(zhí)行 _str = "Static Class!" public static void StaticDemo() Console.WriteLine(_str); class 非靜態(tài)類 private string _str;/非靜態(tài)字段只能由對象來訪問 public 非靜態(tài)類(string source) this._s

33、tr = source;/this等同于類的實例對象:“非靜態(tài)類 c = new 非靜態(tài)類();” public void Demo() Console.WriteLine("非靜態(tài)方法!-" + this._str); 靜態(tài)類.StaticDemo();非靜態(tài)類 noStaticDemo = new 非靜態(tài)類("非靜態(tài)構造函數!");noStaticDemo.Demo();特性:特性提供功能強大的方法,用以將元數據或聲明信息與代碼(程序集、類型、方法、屬性等)相關聯。特性與程序實體關聯后,即可在運行時使用名為“反射”的技術查詢特性。class Prog

34、ram static void Main(string args) MemberInfo info = typeof(Demo);/提供對成員元數據的訪問 /Attribute.GetCustomAttribute(類的元數據, 要搜索的自定義屬性的類型或者基類型) 特性 attribute = (特性)Attribute.GetCustomAttribute(info, typeof(特性); attribute.Show(); Console.ReadKey(true); AttributeUsageAttribute(AttributeTargets.All, AllowMultiple

35、 = true, Inherited = false)/可應用任何元素、允許應用多次、不繼承到派生類 class 特性 : System.Attribute private string _name; public string Name get return _name; private int _age; public int Age get return _age; public 特性(string name, int age) this._name = name; this._age = age; public void Show() Console.WriteLine("姓

36、名:0,年齡:1", _name, _age); 特性("張耕明", 28) public class Demo 序列化和反序列化:序列化就是指將對象狀態(tài)轉換為可存儲或可傳輸格式的過程,而反序列化則是從物理介質或流上獲取數據,并還原為對象的過程。Serializable/指示一個類可以序列化 public class 序列化和反序列化 public string Name get; set; public int Age get; set; public 序列化和反序列化(string name, int age) this.Name = name; this.A

37、ge = age; public static void BinarySerialize(序列化和反序列化 source) FileStream fs = new FileStream("MySerialize.bin", FileMode.Create); BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(fs, source);/執(zhí)行二進制序列化 fs.Dispose(); public static 序列化和反序列化 BinaryDeserialize() FileStream

38、 fs = new FileStream("MySerialize.bin", FileMode.Open, FileAccess.Read, FileShare.Read); BinaryFormatter formatter = new BinaryFormatter(); 序列化和反序列化 serialize = formatter.Deserialize(fs) as 序列化和反序列化;/執(zhí)行二進制反序列化 fs.Dispose(); return serialize; 序列化和反序列化.BinarySerialize(new 序列化和反序列化("張耕明&

39、quot;, 28);/序列化序列化和反序列化 deserialize = 序列化和反序列化.BinaryDeserialize();/反序列化Console.WriteLine("姓名:0,年齡:1", deserialize.Name, deserialize.Age);序列化和反序列化 serialize = new 序列化和反序列化("張耕明", 29);XmlSerializer xmlSerialize = new XmlSerializer(typeof(序列化和反序列化);StreamWriter streamW = new Stream

40、Writer("Myserialize.xml");xmlSerialize.Serialize(streamW, serialize);/執(zhí)行xml序列化streamW.Dispose();FileStream fileStream = new FileStream("Myserialize.xml", FileMode.Open);序列化和反序列化 xmlDeserialize = xmlSerialize.Deserialize(fileStream) as 序列化和反序列化;/執(zhí)行xml反序列化Console.WriteLine("XM

41、L反序列化-姓名:0,年齡:1", xmlDeserialize.Name, xmlDeserialize.Age);fileStream.Dispose();屬性和方法:屬性是實體的描述性性質或特征,具有數據類型、域、默認值三種性質。屬性有訪問器,當讀取屬性時執(zhí)行get訪問器的代碼塊;當向屬性分配一個新值時執(zhí)行set訪問器的代碼塊。不具有set訪問器的屬性被視為只讀屬性,不具有get訪問器的屬性被視為只寫屬性,同時具有get和set訪問器的屬性是可讀可寫屬性。屬性不能作為ref參數或者out參數傳遞。訪問級別:public:公共的、全局的,表示不限制對該類成員的訪問private:

42、私有的,表示只有該類本身可以訪問protected:受保護的,表示只有該類本身和他的子類可以訪問internal:內部的,表示程序集內可訪問構造函數(方法)和析構函數:構造函數:構造函數是在創(chuàng)建給定類型的對象時執(zhí)行的類方法。構造函數具有與類相同的名稱,它通常用來初始化新對象的數據成員。析構函數:是以加類名來命名的,.NET Framework類庫有垃圾回收功能。當某個類的實例被認為是不再有效,并符合析構條件時,.NET Framework類庫的垃圾回收功能就會調用該類的析構函數實現垃圾回收。一個類中只能有一個析構函數,并且無法調用析構函數,它是被自動調用的。class Program stri

43、ng id, name; Program()/析構函數 Console.WriteLine("垃圾回收!"); Console.ReadLine(); public Program() id ="01" name = "未命名" public Program(string id, string name) this.id = id; = name; static void Main() Program p = new Program();/使用沒有參數的構造函數 Program p1 = new Program(&

44、quot;001", "張耕明");/使用有參數的構造函數 Console.WriteLine(); Console.WriteLine(); Console.ReadKey(true); 方法的重載:方法的重載要求參數的類型不同或者參數的個數不同,與方法的返回值無關。class Program static void Main(string args) Program.說("Computer"); Program.說("聯想", 5); Console.ReadKey(true); static

45、void 說(string 姓名) Console.WriteLine("電腦說:我的名字是0。" ,姓名); static void 說(string 品牌,int 年齡 ) Console.WriteLine("電腦說:我誕生于0公司,現在1歲了!", 品牌, 年齡); 結構:結構是一種值類型,通常用來封裝一組相關的變量。C#中使用struct關鍵字來聲明結構,struct不能從class繼承,也不能作為class的基類。支持接口繼承。class Program public struct Rectangle/定義一個矩形結構 private dou

46、ble _width; private double _height; / <summary> / 構造函數,初始化矩形的寬和高 / </summary> / <param name="x">矩形的寬</param> / <param name="y">矩形的高</param> public Rectangle(double x, double y) _width = x; _height = y; / <summary> / 計算矩形的面積 / </summary

47、> / <returns>矩形面積</returns> public double Area() return _width * _height; static void Main() Rectangle rectangle = new Rectangle(3.5, 10);/使用構造函數實例化矩形結構并賦初值 Console.WriteLine("矩形的面積是:" + rectangle.Area(); Console.ReadKey(true); 深拷貝和淺拷貝:class 深拷貝和淺拷貝 private string _shallow;

48、/ <summary> / 淺拷貝 / </summary> public void ShallowCopy() 深拷貝和淺拷貝 instance1 = new 深拷貝和淺拷貝(); 深拷貝和淺拷貝 instance2 = instance1;/淺拷貝,拷貝對象和源對象都指向同一個實例 instance1._shallow = "Hello C#!" instance2._shallow = "Shallow Copy!" Console.WriteLine("淺拷貝:0、1", instance1._shallow, instance2._shallow); / <summary> / 深拷貝 / </summary> public void DeepCopy() int a = 100; int b = a;/深拷貝,拷貝對象和源對象相互獨立,不共享任何實例數據 a = 500; b = 1000; Console.WriteLine("深拷貝:0、1", a, b); 裝箱與拆箱:class 裝箱與拆箱 public void Demo()/裝箱只發(fā)生在值類型,引用類型本身就已經裝在箱子里了(箱子指托管堆)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論