版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 HYPERLINK blo/-zgm/archive/2012/10/19/2731428.html 黑馬程序員C#學(xué)習(xí)筆記 錯(cuò)誤的理解希望能夠得到大家的指正,謝謝!/*實(shí)現(xiàn)了IDisposable接口的所有的對(duì)象在使用完以后要進(jìn)行Dispose()資源的釋放,可以使用using()進(jìn)行資源管理*/創(chuàng)建連接是非常耗時(shí)的,因此不要每次操作都創(chuàng)建連接。SQL語句中的關(guān)鍵字應(yīng)該大寫。/1個(gè)數(shù)據(jù)庫能夠承載的連接是有限的,所以SqlConnection在程序中不能一直保持Open。/對(duì)于數(shù)據(jù)庫來說,連接是最寶貴的資源,用完了以后一定要Close、Dispose。/ 類是對(duì)象的抽象,而對(duì)象是類的具體實(shí)例
2、。類是抽象的,不占用內(nèi)存,而對(duì)象是具體的,占用存儲(chǔ)空間。/元數(shù)據(jù):用于描述要素、數(shù)據(jù)集或數(shù)據(jù)集系列的內(nèi)容、覆蓋范圍、質(zhì)量、管理方式、數(shù)據(jù)的所有者、數(shù)據(jù)的提供方式等有關(guān)的信息。元數(shù)據(jù)最本質(zhì)、最抽象的定義為:data about data(關(guān)于數(shù)據(jù)的數(shù)據(jù))。它是一種廣泛存在的現(xiàn)象,在許多領(lǐng)域有其具體的定義和應(yīng)用。/元數(shù)據(jù)在軟件構(gòu)造領(lǐng)域定義:在程序中不是被加工的對(duì)象,而是通過其值的改變來改變程序的行為的數(shù)據(jù)。它在運(yùn)行過程中起著以解釋方式控制程序行為的作用。在程序的不同位置配置不同值的元數(shù)據(jù),就可以得到與原來等價(jià)的程序行為。.NET Framework基礎(chǔ)類型:.NET所有類型都繼承自System.O
3、bject。C#類型體系包含兩種類型:值類型,引用類型。值類型繼承自System.ValueType。而System.ValueType繼承自System.Object。指針:在信息工程中指針是一個(gè)用來指示一個(gè)內(nèi)存地址的計(jì)算機(jī)語言的變量或中央處理器(CPU)中寄存器(Register)。指針一般出現(xiàn)在比較近機(jī)器語言的語言,如匯編語言或C語言。在使用一個(gè)指針時(shí),一個(gè)程序既可以直接使用這個(gè)指針?biāo)鎯?chǔ)的內(nèi)存地址,又可以使用這個(gè)地址里存儲(chǔ)的變量或函數(shù)的值。寄存器:寄存器是中央處理器內(nèi)的組成部分。寄存器是有限存儲(chǔ)容量的高速存儲(chǔ)部件,它們可用來暫存指令、數(shù)據(jù)和位址。寄存器擁有非常高的讀寫速度,所以在寄存器
4、之間的數(shù)據(jù)傳送非??臁#中使用指針:為了保持類型安全,默認(rèn)情況下C#不支持指針運(yùn)算。不過可以通過使用unsafe關(guān)鍵字來定義允許使用指針的不安全上下文。C#中的不安全代碼不一定是危險(xiǎn)的,只是其安全性無法由CLR進(jìn)行驗(yàn)證。編譯不安全代碼時(shí)需要使用csc /unsafe *.cs。class Program unsafe static void Method(int* parameter)/聲明一個(gè)int類型的指針 *parameter += *parameter;/指針相加 unsafe static void Main() int parameter = Convert.ToInt32(Co
5、nsole.ReadLine(); Method(¶meter); Console.WriteLine(parameter); Console.ReadKey(true); 值類型:值類型直接存儲(chǔ)值一種由類型的實(shí)際值表示的數(shù)據(jù)類型。如果向一個(gè)變量分配值類型,則該變量將被賦以全新的值副本。C#中的值類型包括結(jié)構(gòu)類型和枚舉類型兩大類以及byte、int、long、float、double、char、boolean。引用類型:引用類型存儲(chǔ)的是對(duì)值的引用由類型的實(shí)際值引用表示的數(shù)據(jù)類型。如果為某個(gè)變量分配一個(gè)引用類型,則該變量將引用(或指向)原始值,不會(huì)創(chuàng)建副本。引用類型包括類、接口、委托和裝
6、箱值類型。C#有兩個(gè)內(nèi)置的引用類型:object類型和string類型。常量與變量:常量:常量又叫常數(shù),主要用來存儲(chǔ)在程序運(yùn)行的過程中值不會(huì)改變的數(shù)據(jù)。常量被聲明為字段,通過const關(guān)鍵字聲明,常量必須在聲明時(shí)賦值。變量:變量是指在程序運(yùn)行的過程中值可以改變的數(shù)據(jù)。數(shù)據(jù)類型轉(zhuǎn)換:顯示類型轉(zhuǎn)換:顯示類型轉(zhuǎn)換是將高精度數(shù)值轉(zhuǎn)換為低精度數(shù)值,必須指明將要轉(zhuǎn)換的目標(biāo)類型。由于數(shù)據(jù)類型的差異,有可能丟失部分?jǐn)?shù)據(jù)。隱式(自動(dòng))類型轉(zhuǎn)換:隱式類型轉(zhuǎn)換又稱自動(dòng)類型轉(zhuǎn)換,是將低精度數(shù)值轉(zhuǎn)換為高精度數(shù)值,可以直接賦值而不用指明將要轉(zhuǎn)換的目標(biāo)類型。進(jìn)制轉(zhuǎn)換:int i = 10;Console.WriteLine
7、(十進(jìn)制轉(zhuǎn)二進(jìn)制:+Convert.ToString(i, 2);Console.WriteLine(十進(jìn)制轉(zhuǎn)八進(jìn)制:+Convert.ToString(i, 8);Console.WriteLine(十進(jìn)制轉(zhuǎn)十六進(jìn)制:+Convert.ToString(i, 16);Console.WriteLine(二進(jìn)制轉(zhuǎn)十進(jìn)制:+Convert.ToInt32(1010,2);Console.WriteLine(八進(jìn)制轉(zhuǎn)十進(jìn)制:+Convert.ToInt32(10,8);Console.WriteLine(十六進(jìn)制轉(zhuǎn)十進(jìn)制: + Convert.ToInt32(a,16);Console.ReadK
8、ey(true);C#中運(yùn)算符的使用:算術(shù)運(yùn)算符:+、-、*、/、%Console.WriteLine(10 +0.5+.5);/+運(yùn)算符用于兩個(gè)數(shù)值相加,當(dāng)其中一個(gè)或兩個(gè)操作數(shù)都是字符或字符串時(shí),表示相連Console.WriteLine(10 + 5);Console.WriteLine(a + 10);int i = -10;Console.WriteLine(-i);/-運(yùn)算符可以是一元運(yùn)算符也可以是二元運(yùn)算符Console.WriteLine(10 - 0.5 - .5);/一元運(yùn)算符表示只用一個(gè)參數(shù)的運(yùn)算,二元運(yùn)算符表示符號(hào)左右兩邊用到了兩個(gè)參數(shù)Console.WriteLine(
9、10 * i);/*運(yùn)算符用于計(jì)算操作數(shù)的積Console.WriteLine(double)6 / 25);/運(yùn)算符用于計(jì)算操作數(shù)的商Console.WriteLine(100 % 6);/%運(yùn)算符用于計(jì)算操作數(shù)的余數(shù)Console.ReadKey(true);賦值運(yùn)算符:=、+=、-=、*=、/=、%=、?int i = 100;/=運(yùn)算符表示將右邊的值賦給左邊的變量或常量i += 10;/+=運(yùn)算符等同于 i=i+10i -= 10;/-=運(yùn)算符等同于 i=i-10i /= 10;/=運(yùn)算符等同于 i=i/10i *= 10;/*=運(yùn)算符等同于 i=i*10i %= 3;/%=運(yùn)算符等同
10、于 i=i%10Console.WriteLine(i);int? x = null;/int? 可空類型,表示一個(gè)可能是空,也可能是int的結(jié)構(gòu)int y = x ? 10;/如果x是null,則y=10,否則y=xConsole.WriteLine(y);Console.ReadKey(true);關(guān)系運(yùn)算符:=、!=、=、 6);Console.WriteLine(6=5);Console.ReadKey(true);邏輯運(yùn)算符:&、|、!Console.WriteLine(true|false);/邏輯或運(yùn)算,運(yùn)算符左右有一個(gè)true則結(jié)果為true,否則為falseConsole.W
11、riteLine(true & false);/邏輯與運(yùn)算,運(yùn)算符左右有一個(gè)false則結(jié)果為false,否則為trueConsole.WriteLine(!true);/邏輯非運(yùn)算,對(duì)布爾值取反Console.ReadKey(true);條件運(yùn)算符:?:static void Main(string args) Console.Write(用戶名:); string userName = Console.ReadLine(); Console.Write(密碼:); string password = Console.ReadLine(); bool result = (userName =
12、 admin & password = admin); string strInfo = result ? 登錄成功! : 登錄失敗!;/result為true時(shí)就把登錄成功!賦給strInfo Console.WriteLine(strInfo); Console.ReadKey(true);移位運(yùn)算符:左移位運(yùn)算:按二進(jìn)制形式把所有的數(shù)字向左移動(dòng)對(duì)應(yīng)的位數(shù),高位移出(舍棄),低位的空位補(bǔ)零。在數(shù)字沒有溢出的前提下,對(duì)于正數(shù)和負(fù)數(shù),左移n位就相當(dāng)于乘以2的n次方。右移位運(yùn)算:按二進(jìn)制形式把所有的數(shù)字向右移動(dòng)對(duì)應(yīng)的位數(shù),低位移出(舍棄),高位的空位補(bǔ)符號(hào)位,即正數(shù)補(bǔ)零,負(fù)數(shù)補(bǔ)1。對(duì)于正數(shù)和負(fù)數(shù)
13、,右移n位就相當(dāng)于除以2的n次方。class Program static void Main(string args) /1111111111111111111111111111111111111111111111111111111110011100 3 /=1111111111111111111111111111111111111111111111111111110011100000 (-100 3=0000 0001 1001 (200 3 = 25) int one = -100, two = 200; int temp = one 3;/將變量one的值左移3位。 Console.W
14、riteLine(-100 3;/將變量two的值右移3位。 Console.WriteLine(200 3 = + temp.ToString(); Console.ReadKey(true); is 運(yùn)算符:is運(yùn)算符用于檢查變量是否為指定的類型,如果是返回true,否則返回false。class Program static void Main(string args) int i = 10; bool result = i is int;/判斷變量 i 是否為整型 Console.WriteLine(result.ToString(); Console.ReadKey(true); 枚
15、舉類型:class Program enum 功夫 /使用enum創(chuàng)建枚舉 降龍十八掌 = 0, 如來神掌 = 1, 葵花寶典 = 2, 九陽神功 = 3, 獨(dú)孤九劍 = 4, 太極拳 = 5 static void Main(string args) Console.WriteLine(小子,我看你骨骼驚奇,必是練武奇才,將來維護(hù)宇宙正義與和平的重任就交給你了!); int 學(xué)習(xí) = 0; if (學(xué)習(xí) 5 | int.TryParse(Console.ReadLine(),out 學(xué)習(xí))=false) Console.WriteLine(你什么也沒有學(xué)會(huì)!); else switch (學(xué)
16、習(xí)) case (int)功夫.降龍十八掌: Console.WriteLine(你學(xué)會(huì)了降龍十八掌!); break; case (int)功夫.如來神掌: Console.WriteLine(你學(xué)會(huì)了如來神掌!); break; case (int)功夫.葵花寶典: Console.WriteLine(你學(xué)會(huì)了葵花寶典!); break; case (int)功夫.九陽神功: Console.WriteLine(你學(xué)會(huì)了九陽神功!); break; case (int)功夫.獨(dú)孤九劍: Console.WriteLine(你學(xué)會(huì)了獨(dú)孤九劍!); break; case (int)功夫.太極
17、拳: Console.WriteLine(你學(xué)會(huì)了太極拳!); break; default: Console.WriteLine(你什么也沒有學(xué)會(huì)!); 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是否為數(shù)字:
18、0, Char.IsDigit(b); Console.WriteLine(IsLetterOrDigit方法判斷c是否為字母或數(shù)字:0, Char.IsLetterOrDigit(c); Console.WriteLine(IsLower方法判斷a是否為小寫字母:0, Char.IsLower(a); Console.WriteLine(IsUpper方法判斷c是否為大寫字母:0, Char.IsUpper(c); Console.WriteLine(IsPunctuation方法判斷d是否為標(biāo)點(diǎn)符號(hào):0, Char.IsPunctuation(d); Console.WriteLine(I
19、sSeparator方法判斷e是否為分隔符:0, Char.IsSeparator(e); Console.WriteLine(IsWhiteSpace方法判斷f是否為空白:0, Char.IsWhiteSpace(f); Console.ReadKey(true); 流程控制語句:選擇結(jié)構(gòu):if(boolean )語句塊 else語句塊switch(表達(dá)式)case 常量表達(dá)式:語句塊 break;default:語句塊 break;循環(huán)結(jié)構(gòu):while(boolean)語句塊 、do語句塊while(boolean)for(聲明int類型變量并賦值;判斷產(chǎn)生循環(huán)的條件;要循環(huán)的表達(dá)式)語句
20、塊foreach(類型 循環(huán)變量名 in 集合)語句塊跳轉(zhuǎn)語句:break(終止循環(huán))語句只能應(yīng)用在switch、while、do.while、for或foreach語句中,break語句應(yīng)用于循環(huán)作用域中。continue(忽略本次循環(huán),繼續(xù)下次循環(huán))語句只能應(yīng)用于while、do.while、for或foreach語句中,continue語句應(yīng)用于循環(huán)作用域中。goto語句用于將控制轉(zhuǎn)移到由標(biāo)簽標(biāo)記的語句。goto 標(biāo)簽; 標(biāo)簽: 語句塊return語句用于終止當(dāng)前執(zhí)行的方法、可以有返回值。數(shù)組:一維數(shù)組:int arr;/*聲明數(shù)組*/*初始化數(shù)組*/ int arr = new int
21、5;/*表示數(shù)組長(zhǎng)度是5*/int arr = 1, 2, 3 ;int arr = new int 1, 2, 3;二維數(shù)組:int, arr;/*聲明數(shù)組*/*初始化數(shù)組*/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 ; Console.Write(數(shù)組的行數(shù): + arr.GetLength(0);/輸出二維數(shù)組的行數(shù) Console.Write(t數(shù)組的列數(shù): + arr.GetLength(
22、1);/輸出二維數(shù)組的列數(shù) Console.WriteLine(); Console.WriteLine(循環(huán)輸出數(shù)組中的元素:); for (int y = 0; y arr.GetLength(1);y+ ) Console.Write(t第 + y + 列); Console.WriteLine(); for (int i = 0; i arr.GetLength(0);i+ )/遍歷二維數(shù)組 string str = ; for (int x = 0; x arr.GetLength(1);x+ ) str = str + Convert.ToString(arri, x)+t; Co
23、nsole.WriteLine(第+i+行: +str); Console.ReadKey(true);ArrayList:動(dòng)態(tài)數(shù)組,可以動(dòng)態(tài)的添加和刪除元素。ArrayList的容量可以根據(jù)需要自動(dòng)擴(kuò)充,只能是一維的形式。class Program static void Main() int arr = new int 1, 2, 3, 4, 5, 6 ; Array.Reverse(arr);/反轉(zhuǎn)整個(gè)一維數(shù)組中元素的順序 foreach (int i in arr) Console.Write(i); Console.WriteLine(); ArrayList list = new
24、ArrayList(arr);/實(shí)例化ArrayList動(dòng)態(tài)數(shù)組并賦初值 list.Add(你好!);/增加數(shù)據(jù)到動(dòng)態(tài)數(shù)組中 list.AddRange(arr);/添加集合到動(dòng)態(tài)數(shù)組的末尾 Console.WriteLine(list.Contains(5);/判斷指定元素是否在數(shù)組中 Console.WriteLine(list.IndexOf(5);/輸出指定元素在數(shù)組中的索引位置,如果沒有找到輸出-1 list.Insert(0, Hi!);/插入數(shù)據(jù)到指定的位置 list.Remove(你好!);/你好!被看做是一個(gè)元素,根據(jù)元素內(nèi)容移除一個(gè)指定的元素 list.RemoveAt(1
25、);/根據(jù)元素的索引移除一個(gè)指定的元素 list.RemoveRange(1, list.Count - 1);/移除指定范圍內(nèi)的所有元素 foreach (object obj in list) Console.Write(obj); list.Clear();/移除所有元素 Console.ReadKey(true); 哈希表Hashtable:散列表也叫哈希表。它表示鍵/值(key,value)對(duì)的集合。class Program static void Main() Hashtable htable = new Hashtable();/實(shí)例化Hashtable對(duì)象 htable.Ad
26、d(1, 你好!);/向哈希表中添加元素 htable.Add(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值); foreach (DictionaryEntry dicE
27、ntry in htable) Console.WriteLine(t + dicEntry.Key + t + dicEntry.Value); Console.WriteLine(htable.ContainsKey(姓名);/判斷哈希表中是否包含指定的鍵 Console.WriteLine(htable.ContainsValue(張耕明);/判斷哈希表中是否包含指定的值 Console.ReadKey(true); 靜態(tài)和非靜態(tài):static class 靜態(tài)類/靜態(tài)類不能實(shí)例化,只能包含靜態(tài)成員和靜態(tài)方法,靜態(tài)成員或方法只能由類來訪問 private static string _s
28、tr; static 靜態(tài)類()/靜態(tài)構(gòu)造函數(shù)不能帶有參數(shù),不能有訪問修飾符,在調(diào)用類成員時(shí)執(zhí)行 _str = Static Class!; public static void StaticDemo() Console.WriteLine(_str); class 非靜態(tài)類 private string _str;/非靜態(tài)字段只能由對(duì)象來訪問 public 非靜態(tài)類(string source) this._str = source;/this等同于類的實(shí)例對(duì)象:“非靜態(tài)類 c = new 非靜態(tài)類();” public void Demo() Console.WriteLine(非靜態(tài)方法
29、!- + this._str); 靜態(tài)類.StaticDemo();非靜態(tài)類 noStaticDemo = new 非靜態(tài)類(非靜態(tài)構(gòu)造函數(shù)!);noStaticDemo.Demo();特性:特性提供功能強(qiáng)大的方法,用以將元數(shù)據(jù)或聲明信息與代碼(程序集、類型、方法、屬性等)相關(guān)聯(lián)。特性與程序?qū)嶓w關(guān)聯(lián)后,即可在運(yùn)行時(shí)使用名為“反射”的技術(shù)查詢特性。class Program static void Main(string args) MemberInfo info = typeof(Demo);/提供對(duì)成員元數(shù)據(jù)的訪問 /Attribute.GetCustomAttribute(類的元數(shù)據(jù), 要
30、搜索的自定義屬性的類型或者基類型) 特性 attribute = (特性)Attribute.GetCustomAttribute(info, typeof(特性); attribute.Show(); Console.ReadKey(true); AttributeUsageAttribute(AttributeTargets.All, AllowMultiple = true, Inherited = false)/可應(yīng)用任何元素、允許應(yīng)用多次、不繼承到派生類 class 特性 : System.Attribute private string _name; public string N
31、ame 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(姓名:0,年齡:1, _name, _age); 特性(張耕明, 28) public class Demo 序列化和反序列化:序列化就是指將對(duì)象狀態(tài)轉(zhuǎn)換為可存儲(chǔ)或可傳輸格式的過程,而反序列化則是從物理介質(zhì)或流上獲取數(shù)據(jù),并還原為對(duì)象的過程。Se
32、rializable/指示一個(gè)類可以序列化 public class 序列化和反序列化 public string Name get; set; public int Age get; set; public 序列化和反序列化(string name, int age) this.Name = name; this.Age = age; public static void BinarySerialize(序列化和反序列化 source) FileStream fs = new FileStream(MySerialize.bin, FileMode.Create); BinaryFormat
33、ter formatter = new BinaryFormatter(); formatter.Serialize(fs, source);/執(zhí)行二進(jìn)制序列化 fs.Dispose(); public static 序列化和反序列化 BinaryDeserialize() FileStream fs = new FileStream(MySerialize.bin, FileMode.Open, FileAccess.Read, FileShare.Read); BinaryFormatter formatter = new BinaryFormatter(); 序列化和反序列化 seria
34、lize = formatter.Deserialize(fs) as 序列化和反序列化;/執(zhí)行二進(jìn)制反序列化 fs.Dispose(); return serialize; 序列化和反序列化.BinarySerialize(new 序列化和反序列化(張耕明, 28);/序列化序列化和反序列化 deserialize = 序列化和反序列化.BinaryDeserialize();/反序列化Console.WriteLine(姓名:0,年齡:1, deserialize.Name, deserialize.Age);序列化和反序列化 serialize = new 序列化和反序列化(張耕明, 2
35、9);XmlSerializer xmlSerialize = new XmlSerializer(typeof(序列化和反序列化);StreamWriter streamW = new StreamWriter(Myserialize.xml);xmlSerialize.Serialize(streamW, serialize);/執(zhí)行xml序列化streamW.Dispose();FileStream fileStream = new FileStream(Myserialize.xml, FileMode.Open);序列化和反序列化 xmlDeserialize = xmlSerial
36、ize.Deserialize(fileStream) as 序列化和反序列化;/執(zhí)行xml反序列化Console.WriteLine(XML反序列化-姓名:0,年齡:1, xmlDeserialize.Name, xmlDeserialize.Age);fileStream.Dispose();屬性和方法:屬性是實(shí)體的描述性性質(zhì)或特征,具有數(shù)據(jù)類型、域、默認(rèn)值三種性質(zhì)。屬性有訪問器,當(dāng)讀取屬性時(shí)執(zhí)行g(shù)et訪問器的代碼塊;當(dāng)向?qū)傩苑峙湟粋€(gè)新值時(shí)執(zhí)行set訪問器的代碼塊。不具有set訪問器的屬性被視為只讀屬性,不具有g(shù)et訪問器的屬性被視為只寫屬性,同時(shí)具有g(shù)et和set訪問器的屬性是可讀可寫屬
37、性。屬性不能作為ref參數(shù)或者out參數(shù)傳遞。訪問級(jí)別:public:公共的、全局的,表示不限制對(duì)該類成員的訪問private:私有的,表示只有該類本身可以訪問protected:受保護(hù)的,表示只有該類本身和他的子類可以訪問internal:內(nèi)部的,表示程序集內(nèi)可訪問構(gòu)造函數(shù)(方法)和析構(gòu)函數(shù):構(gòu)造函數(shù):構(gòu)造函數(shù)是在創(chuàng)建給定類型的對(duì)象時(shí)執(zhí)行的類方法。構(gòu)造函數(shù)具有與類相同的名稱,它通常用來初始化新對(duì)象的數(shù)據(jù)成員。析構(gòu)函數(shù):是以加類名來命名的,.NET Framework類庫有垃圾回收功能。當(dāng)某個(gè)類的實(shí)例被認(rèn)為是不再有效,并符合析構(gòu)條件時(shí),.NET Framework類庫的垃圾回收功能就會(huì)調(diào)用該類
38、的析構(gòu)函數(shù)實(shí)現(xiàn)垃圾回收。一個(gè)類中只能有一個(gè)析構(gòu)函數(shù),并且無法調(diào)用析構(gòu)函數(shù),它是被自動(dòng)調(diào)用的。class Program string id, name; Program()/析構(gòu)函數(shù) 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();/使用沒有參數(shù)的構(gòu)造函數(shù) Progra
39、m p1 = new Program(001, 張耕明);/使用有參數(shù)的構(gòu)造函數(shù) Console.WriteLine(); Console.WriteLine(); Console.ReadKey(true); 方法的重載:方法的重載要求參數(shù)的類型不同或者參數(shù)的個(gè)數(shù)不同,與方法的返回值無關(guān)。class Program static void Main(string args) Program.說(Computer); Program.說(聯(lián)想, 5); Console.ReadKey(true); static void 說(string 姓名) Console.WriteLine(電腦說:我
40、的名字是0。 ,姓名); static void 說(string 品牌,int 年齡 ) Console.WriteLine(電腦說:我誕生于0公司,現(xiàn)在1歲了!, 品牌, 年齡); 結(jié)構(gòu):結(jié)構(gòu)是一種值類型,通常用來封裝一組相關(guān)的變量。C#中使用struct關(guān)鍵字來聲明結(jié)構(gòu),struct不能從class繼承,也不能作為class的基類。支持接口繼承。class Program public struct Rectangle/定義一個(gè)矩形結(jié)構(gòu) private double _width; private double _height; / / 構(gòu)造函數(shù),初始化矩形的寬和高 / / 矩形的寬 /
41、 矩形的高 public Rectangle(double x, double y) _width = x; _height = y; / / 計(jì)算矩形的面積 / / 矩形面積 public double Area() return _width * _height; static void Main() Rectangle rectangle = new Rectangle(3.5, 10);/使用構(gòu)造函數(shù)實(shí)例化矩形結(jié)構(gòu)并賦初值 Console.WriteLine(矩形的面積是: + rectangle.Area(); Console.ReadKey(true); 深拷貝和淺拷貝:class
42、 深拷貝和淺拷貝 private string _shallow; / / 淺拷貝 / public void ShallowCopy() 深拷貝和淺拷貝 instance1 = new 深拷貝和淺拷貝(); 深拷貝和淺拷貝 instance2 = instance1;/淺拷貝,拷貝對(duì)象和源對(duì)象都指向同一個(gè)實(shí)例 instance1._shallow = Hello C#!; instance2._shallow = Shallow Copy!; Console.WriteLine(淺拷貝:0、1, instance1._shallow, instance2._shallow); / / 深拷貝
43、 / public void DeepCopy() int a = 100; int b = a;/深拷貝,拷貝對(duì)象和源對(duì)象相互獨(dú)立,不共享任何實(shí)例數(shù)據(jù) a = 500; b = 1000; Console.WriteLine(深拷貝:0、1, a, b); 裝箱與拆箱:class 裝箱與拆箱 public void Demo()/裝箱只發(fā)生在值類型,引用類型本身就已經(jīng)裝在箱子里了(箱子指托管堆) int i = 0; object obj = i;/裝箱就是在托管堆中創(chuàng)建值類型的實(shí)例,然后返回一個(gè)新對(duì)象的地址 i = (int)obj;/拆箱就是獲取箱子中原本屬于值類型的指針 Hashtab
44、le hashTable = new Hashtable();/大量的裝箱與拆箱會(huì)造成多余的對(duì)象,會(huì)影響系統(tǒng)性能。 for (int x = 0; x 10; x+) hashTable.Add(x, obj); int y = 10;/值類型使用時(shí)避免隱式的和引用類型轉(zhuǎn)換,盡可能以顯示的方式來實(shí)現(xiàn) object o = y.ToString();/ToString方法由int類型重寫,因此不會(huì)裝箱List 泛型集合 = new List();/在操作值類型時(shí)盡量使用泛型集合來代替非泛型集合,會(huì)得到性能上的提升泛型集合.Add(1);/不會(huì)發(fā)生裝箱使用using:using System;/引
45、入命名空間using T = System.Threading;/使用using創(chuàng)建命名空間別名class Demo public Demo() T.Thread.Sleep(1000); using (SqlConnection sqlConn = new SqlConnection() /強(qiáng)制資源清理面向?qū)ο螅好嫦驅(qū)ο蟪绦蛟O(shè)計(jì)可以被視作一種在程序中包含各種獨(dú)立而又互相調(diào)用的單位和對(duì)象的思想。面向?qū)ο蟪绦蛟O(shè)計(jì)中的每一個(gè)對(duì)象都應(yīng)該能夠接受數(shù)據(jù)、處理數(shù)據(jù)并將數(shù)據(jù)傳達(dá)給其它對(duì)象。因此它們都可以被看作是負(fù)有責(zé)任的角色。面向?qū)ο蟮木幊谭绞骄哂蟹庋b、繼承和多態(tài)性等特點(diǎn)。類:類是對(duì)象這個(gè)概念在面向?qū)ο缶幊?/p>
46、語言中的反映,是相同對(duì)象的集合。類描述了在概念上有相同含義的對(duì)象,并為這些對(duì)象統(tǒng)一定義了屬性和方法。類與對(duì)象的區(qū)別:類是具有相同或相似結(jié)構(gòu)、操作和約束規(guī)則的對(duì)象組成的集合,而對(duì)象是某一類的具體化實(shí)例,每一個(gè)類都是具有某些共同特征的對(duì)象的抽象。public class Person /類使用class關(guān)鍵字來聲明,public是類的修飾符 public string name; public int age;Person p = new Person() name = 張耕明, age = 28 ;/類的一個(gè)對(duì)象修飾符:abstract-抽象類,不允許建立類的實(shí)例sealed-密封類,不允許被繼
47、承封裝:隱藏內(nèi)部實(shí)現(xiàn),內(nèi)部的更改不會(huì)影響到外部原有的實(shí)現(xiàn)。讓外部接口傾向于穩(wěn)定,把變化的和不變化的分開。class Demo public void Method()/提供與外部交互的接口 Show(); private void Show()/隱藏的內(nèi)部實(shí)現(xiàn) Console.WriteLine(Hello World!);/內(nèi)部的更改不會(huì)影響到外部原有的實(shí)現(xiàn) 繼承:通過繼承可以創(chuàng)建子類(派生類)和父類之間的層次關(guān)系,子類(派生類)可以從其父類中繼承屬性和方法,通過這種關(guān)系模型可以復(fù)用現(xiàn)有的代碼,減少代碼的重復(fù)。C#中一次只允許繼承一個(gè)類,不能同時(shí)繼承多個(gè)類。class Car public
48、string color = 紅色; class Bicycle : Car /使用冒號(hào)加上類名來表示繼承關(guān)系 public Bicycle() Console.WriteLine(this.color);/通過繼承得到的基類成員 多態(tài):多態(tài)性是允許你將父對(duì)象設(shè)置成為和一個(gè)或更多的它的子對(duì)象相等的技術(shù),賦值之后,父對(duì)象就可以根據(jù)當(dāng)前賦值給它的子對(duì)象的特性以不同的方式運(yùn)作。就是說不同的類在進(jìn)行同一種操作時(shí)可以有不同的行為,這是一種改寫對(duì)象行為的技術(shù)。class Program static void Main(string args) Person person = new Person new
49、 GoodPerson(), new BadPerson() ;/person數(shù)組中不同的兩個(gè)類 foreach (Person p in person) p.Say();/輸出了不同的行為 Console.ReadKey(true); abstract class Person public abstract void Say(); class GoodPerson : Person public override void Say() Console.WriteLine(好男孩:放開那個(gè)女孩!); class BadPerson : Person public override void
50、Say() Console.WriteLine(壞男孩:我投降!); 接口:接口是一種用來定義程序的協(xié)議,它描述可屬于任何類或結(jié)構(gòu)的相關(guān)行為。接口不能包含字段。類和結(jié)構(gòu)可以像類繼承基類或者結(jié)構(gòu)一樣從接口繼承,但是可以繼承多個(gè)接口。當(dāng)類或結(jié)構(gòu)繼承接口后,必須要去實(shí)現(xiàn)接口。接口的特征:繼承接口的任何非抽象類型都必須實(shí)現(xiàn)接口的所有成員;不能直接實(shí)例化接口;接口可以包含事件、索引器、方法和屬性;接口不能包含方法的實(shí)現(xiàn);類或者結(jié)構(gòu)可以從多個(gè)接口繼承,接口自身也可以從多個(gè)接口繼承。class Program static void Main(string args) IMyInterface demo =
51、 new Demo();/使用派生類對(duì)象實(shí)例化接口 demo.Method(); Console.ReadKey(true); interface IMyInterface /定義接口 void Method(); class Demo : IMyInterface public void Method() Console.WriteLine(實(shí)現(xiàn)接口!); 顯示的實(shí)現(xiàn)接口成員:如果類實(shí)現(xiàn)兩個(gè)接口,并且這兩個(gè)接口具有相同簽名的成員,那么在類中實(shí)現(xiàn)該成員將導(dǎo)致兩個(gè)接口都使用該成員作為它們的實(shí)現(xiàn),這時(shí)可以顯示的實(shí)現(xiàn)接口成員。顯示接口成員實(shí)現(xiàn)中不能包含訪問修飾符、abstract、virtual、o
52、verride或static修飾符。顯示接口成員是屬于接口的成員,而不是類的成員,只能使用接口對(duì)象來訪問,不能使用類對(duì)象來訪問。class Program static void Main(string args) IOne one = new Demo();/使用派生類對(duì)象實(shí)例化接口 ITwo two = new Demo(); one.Show(); two.Show(); Console.ReadKey(true); interface IOne void Show(); interface ITwo void Show(); class Demo : IOne, ITwo/繼承多個(gè)接口
53、 void IOne.Show()/顯示接口成員實(shí)現(xiàn) Console.WriteLine(實(shí)現(xiàn)接口一!); void ITwo.Show() Console.WriteLine(實(shí)現(xiàn)接口二!); 抽象類與抽象方法:抽象類主要用來提供多個(gè)派生類可共享的基類的公共定義。它與非抽象類的主要區(qū)別:抽象類不能直接實(shí)例化。抽象類中可以包含抽象成員,但非抽象類中不可以包含抽象成員。抽象類不能被密封。abstract class Person /聲明抽象類。派生類只能繼承一個(gè)抽象類,可以繼承任意多個(gè)接口。 public abstract void Say();/抽象方法沒有實(shí)現(xiàn)部分,必須在派生類中重寫,只能在
54、抽象類中出現(xiàn)。 public virtual void Money()/虛方法必須有實(shí)現(xiàn)部分,可以不用在派生類中重寫,可以在非抽象類中出現(xiàn)。 Console.WriteLine(我掙錢了!); class Programmer : Person public override void Say() base.Money(); Console.WriteLine(我來自北京中關(guān)村黑馬訓(xùn)練營!); class Program static void Main() Programmer programmer = new Programmer(); programmer.Say(); Console.
55、ReadKey(true); 密封類與密封方法:密封類可以用來限制擴(kuò)展性,如果密封了某個(gè)類,則其它類不能從該類繼承。如果密封了某個(gè)成員,則派生類不能重寫該成員的實(shí)現(xiàn)。一般情況下不應(yīng)該密封類和成員。并不是每個(gè)方法都可以聲明為密封方法,密封方法只能用于對(duì)基類的虛方法或者抽象方法進(jìn)行重寫。滿足如下條件,則應(yīng)該將其密封:類是靜態(tài)類。類包含帶有安全敏感信息的繼承的受保護(hù)成員。類繼承多個(gè)虛成員,并且密封每個(gè)成員的開發(fā)和測(cè)試的開銷明顯大于密封整個(gè)類。類是一個(gè)要求使用反射進(jìn)行快速搜索的屬性,密封屬性可以提高反射在檢索屬性時(shí)的性能。abstract class Person public abstract vo
56、id Say(); sealed class Man : Person /聲明一個(gè)密封類,該類繼承自另一個(gè)類。 public sealed override void Say()/密封方法只能用于對(duì)基類的虛方法或者抽象方法進(jìn)行重寫 Console.WriteLine(這是一個(gè)密封類和密封方法的演示!); 泛型:泛型是具有占位符(類型參數(shù))的類、結(jié)構(gòu)、接口和方法,這些占位符是類、結(jié)構(gòu)、接口和方法所存儲(chǔ)或使用的一個(gè)或多個(gè)類型的占位符。泛型集合類可以將類型參數(shù)用作它所存儲(chǔ)的對(duì)象的類型的占位符;類型參數(shù)作為其字段的類型及其方法的參數(shù)類型出現(xiàn)。泛型方法可以將其類型參數(shù)用作其返回值的類型或者其某個(gè)形參的類
57、型。使用泛型類型的優(yōu)點(diǎn):泛型類和泛型方法同時(shí)具備可重用性、類型安全和效率,泛型通常用與集合以及作用于集合的方法一起使用??梢詣?chuàng)建自定義泛型類型和方法,以提供自己的通用解決方案,設(shè)計(jì)類型安全的高效模式??梢詫?duì)泛型類進(jìn)行約束以訪問特定數(shù)據(jù)類型的方法。關(guān)于泛型數(shù)據(jù)類型中使用的類型的信息可以在運(yùn)行時(shí)通過反射獲取。/泛型的參數(shù) T 可以看作是一個(gè)占位符,它不是一種類型,它僅代表了某種可能的類型。 public class WideClass /創(chuàng)建一個(gè)泛型類 public T Info get; set; public void Method() Console.WriteLine(Info); cla
58、ss Program static void Main(string args) WideClass instance = new WideClass(); instance.Info = 泛型演示!; instance.Method(); Console.ReadKey(true); 枚舉:枚舉(enum)是值類型的一種特殊形式,枚舉類型有名稱、基礎(chǔ)類型和一組字段?;A(chǔ)類型必須是一個(gè)有符號(hào)(或無符號(hào))整數(shù)類型,如果沒有顯示的聲明基礎(chǔ)類型,則使用Int32。字段是靜態(tài)文本字段,其中的每一個(gè)字段都表示常數(shù)。程序中使用枚舉的限制:不能定義自己的方法;不能實(shí)現(xiàn)接口;不能定義屬性和事件。位域支持的運(yùn)算
59、符:1、“|”表示兩邊求并集(元素相加,相同元素只出現(xiàn)一次)。2、“&”表示兩邊是否其中一個(gè)是另外一個(gè)的子集,如果是返回子集,否則返回0。3、“”表示從兩者的并集中去除兩者的交集。4、“&( )”從組合狀態(tài)中去掉一個(gè)元素。 / / 枚舉類型可以使用Flags位域標(biāo)志,表示這些枚舉類型可以作為位域(即一組標(biāo)志)處理。 / C#位域主要用于.Net里面對(duì)于某一個(gè)事物有多種混合狀態(tài)時(shí)使用,為了更好的實(shí)現(xiàn)混合狀態(tài),我們可以在枚舉中加入位域標(biāo)簽。 / Flags public enum StudyTime /定義枚舉常量時(shí)使用2倍遞增,這樣可以使組合的枚舉常量中的各個(gè)標(biāo)志都不重疊。 星期一 = 1 0,
60、 星期二 = 1 1, 星期三 = 1 2, 星期四 = 1 3, 星期五 = 1 4, 所有時(shí)間 = 星期一 | 星期二 | 星期三 | 星期四 | 星期五 public enum Course 計(jì)算機(jī) = 1 0, 英語 = 1 1, 國學(xué) = 1 2, 數(shù)學(xué) = 1 3, class Program static void Main(string args) /按位或|、按位與&、按位異或、按位取反。 Console.WriteLine(1 | 2);/將十進(jìn)制轉(zhuǎn)換為二進(jìn)制,然后求并集。 Console.WriteLine(1 & 3);/將十進(jìn)制轉(zhuǎn)換為二進(jìn)制,然后求交集。 Consol
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度政府機(jī)關(guān)停車場(chǎng)車位租賃電子合同(含公務(wù)車管理)4篇
- 二零二五年酒吧贊助商合作及進(jìn)場(chǎng)費(fèi)用合同范本3篇
- 二零二五年度生物醫(yī)藥生產(chǎn)車間承包管理合同范本4篇
- 個(gè)人與影視公司2024年度影視制作合同2篇
- 二零二五年度品牌策劃與市場(chǎng)營銷合同5篇
- 2025年度鋼結(jié)構(gòu)景觀工程設(shè)計(jì)承包合同4篇
- 二零二五年度旅游紀(jì)念品店鋪?zhàn)赓U合同-文化旅游商品合作開發(fā)協(xié)議4篇
- 2025年智能制造業(yè)廠房租賃合同附土地使用權(quán)及智能升級(jí)條款3篇
- 磚廠與合作伙伴2025年度戰(zhàn)略合作合同2篇
- 2025年綠色能源項(xiàng)目租賃合同標(biāo)準(zhǔn)范本4篇
- 獅子王影視鑒賞
- 一年級(jí)數(shù)學(xué)加減法口算題每日一練(25套打印版)
- 2024年甘肅省武威市、嘉峪關(guān)市、臨夏州中考英語真題
- DL-T573-2021電力變壓器檢修導(dǎo)則
- 繪本《圖書館獅子》原文
- 安全使用公共WiFi網(wǎng)絡(luò)的方法
- 2023年管理學(xué)原理考試題庫附答案
- 【可行性報(bào)告】2023年電動(dòng)自行車相關(guān)項(xiàng)目可行性研究報(bào)告
- 歐洲食品與飲料行業(yè)數(shù)據(jù)與趨勢(shì)
- 放療科室規(guī)章制度(二篇)
- 中高職貫通培養(yǎng)三二分段(中職階段)新能源汽車檢測(cè)與維修專業(yè)課程體系
評(píng)論
0/150
提交評(píng)論