第一章?? 簡單認識.NET框架
???(1)首先我們得知道 .NET框架具有兩個主要組件:公共語言進行時CLR(Common Language Runtime)和框架類庫FCL(Framework Class Library)
?????? 配圖:
??????????????
???(2).NET的編譯過程:
??????? 配圖:
??????????????
???? 其中,CLR還包括通用類型系統CTS(Common Type System)和公共語言規范CLS(Common Language Specification)
?? (3).NET框架核心類庫及其功能
????? 配圖:
???????????
????????
????(4)
??????? C#語言要編程可以被CPU解析執行的代碼需要兩次編譯:
???????? 第一次編譯:將C#語言通過C#編譯器編譯成MSIL中間代碼
???????? 第二次編譯:將MSIL代碼通過即時編譯器(JIT)編譯成CPU可以解析執行的代碼,或者成為(平臺專用代碼)
???????Java程序想要被CPU解析執行也需要兩次編譯:
???????? 第一次編譯:將后綴名為java的文件通過Java編譯器編譯成后綴名為.class(字節碼)文件
???????? 第二次編譯:將.class文件通過Java虛擬機(jvm)編譯成CPU可以解析的代碼
??? (5)面向對象
?????????? 面向對象三大特性:封裝,繼承和多態
????????? 那些年我們學過的訪問修飾符:
????????? public :任何位置,包括跨程序集
????????? internal:在當前程序集(項目)中都可以訪問
????????? private:只能在當前類中訪問(當前類的花括號中訪問)
????????? protected:只能在當前類和子類中使用
????(6)變量,類和方法的命名
???????? 駱駝命名法:第一個單詞的首字母小寫,后續有含義的單詞首字母大寫。?? 變量
???????? 帕斯卡命名法:每一個單詞的首字母大寫??? 類和方法
?????(7)new:代表的含義
???????????1.創建對象
?????????? 2.開辟空間
???????????3.自動調用構造函數
????(8)字段和屬性的區別
?????????? 1.屬性不能保存數據,真正保存數據的是字段。
?????????? 2.屬性是可有可無的,字段是必須的。
???????????3.如果字段只是讓類內部訪問,那么設置成private,如果想找一個中間者,在Main方法中訪問到類中的私有字段,那么屬性可以是一種選擇。
????(9)自動屬性
????????? 定義:當為我們不需要進行邏輯判斷時可以使用自動屬性。 定義自動屬性在后臺會自動幫我們生成一個對應數據類型的私有字段
????(10)CLR的主要用途:
??????? CLR是所有.NET程序運行的環境,是所有.NET應用程序的編程基礎,所有.NET受CLR監管和處理,這些操作包括進程內的應用程序加載,將IL轉換為GG,
??????? 異常處理,垃圾回收,加載程序集
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?第二章 深入C#數據類型
??? (1)值類型和引用類型
??????? 值類型:是在棧上存儲真實的值??? 引用類型:在棧和堆上都開辟空間
????????值類型:int? double float boolean? char byte long short? 枚舉(enum)? 結構體(struct)
?????? 引用類型:int[] class 接口(interface) string
????(2)結構
?????? 定義:
?????????
訪問修飾符 struct 結構名{// 結構體}例: public struct Student {//結構體 }
???(2)注意點:
?????? 1.在結構中可以有字段和方法
?????? 2.定義結構時,結構中的字段不能被賦初值
?????? 3.可以不用new,直接定義結構的對象即可
?????? 4.聲明結構的對象后,必須給結構的成員賦初值
?????? 5.結構體也是一種特殊的值類型
???(3)裝箱和拆箱
??????? 將值類型轉換為引用類型的過程稱為裝箱,反之稱為拆箱
?????? 示例:
????????
static void Main(String[] args) {int i=123;oject o=i; //裝箱i=456; //改變i的內容Console.WriteLine("值類型的值:{0}",i); Console.WriteLine("引用類型的值:{0}",o); }
???(4)不同類型的參數傳遞
?????????值方式參數傳遞:傳遞數據類型是值類型,沒有ref在方法中不會保留
?????????????????????????????? 傳遞數據類型是引用類型,沒有ref在方法中會永久保留
???????? 引用方式傳遞:不管有沒有ref都會永久保留
????
例:class Voter {public void Vote(SE se){//人氣值+1se.Popularity++;} }/測試相關代碼SE zhang=new SE(); zhang.Age=25; zhang.Name="張梅"; zhang.Gender=Gender.female; zhang.Popularity=10; //投票前 MessageBox.Show(zhang.SayHi()); Voter voter=new Voter(); voter.Vote(zhang); //引用類型做參數 //投票后 MessageBox.Show(zhang.SayHi());
???(5)結構和類的區別
?????????1.結構是值類型而類是引用類型
?????????2.結構和另外一個結構不能繼承和被繼承
???????? 3.結構沒有默認構造而類有
???????? 4.結構體沒有析構函數而類有
???????? 5.結構體可以不使用new初始化,而類不可以
?第三章? 使用集合組織相關數據
???(1)定義:
?????????? 集合:
???????? 某些特定的對象集中在一起就是集合
??????????? 數組:
?????????可以存儲相同數據類型的一堆數據的容器
????(2)集合
???????? 集合分為泛型集合和非泛型集合
????????? 泛型集合分為單列和雙列集合? (List<T>和Dictionary<K,V>)
????????? 非泛型集合分為單列和雙列集合?(ArrayList和HashTable)
???? (3)常用的方法和屬性
?????????
Add(); //添加Remove(); //刪除RemobeAt(); //根據索引刪除 不適用 雙列集合 count //集合存儲元素的個數Contains(); //檢測元素是否存在ContainsKey(); //ContainsValue();Capcity //集合占用空間
???? 注意事項:如果刪除了集合中的某一個元素,那么集合的索引會自動維護
???(4)遍歷方案:
?????
ArrayList list=new ArrayLIst(); Student stu1=new Student();stu1.Name="jiejie";stu1.Age=15;list.Add(stu1); Student stu2=new Student();stu2.Name="jiji";stu2.Age=18;list.Add(stu2);//foreach foreach(Student item in list) {Console.WriteLine(item.Age+"\t"+item.Name); }//for for(int i=0;i<list.Count;i++) {Console.WriteLine((Student)list[i].Name); }
HashTable 遍歷三種方案HashTable table=new HashTable(); 第一種方式:遍歷所有的Keys foreach(var item in table.Keys) {//一個item代表一個keyConsole.WriteLine("key是{0}\tvalue是{1}",item,table[item]); }第二種遍歷方式:遍歷所有的value集合 foreach(var item in table.Values) {//一個item代表一個valueConsole.WriteLine("value是{0}",item); }//遍歷整個table foreach(DictionaryEntry item in table) {Console.WriteLine("key是{0}\tvalue是{1}",item.Key,item.Value); }
第四章 深入類的方法
? (1)構造函數
?????? 方法名和類名相同,沒有返回值
?????? 注意:在C#中,當我們定義了一個類后,系統底層默認會生成一個和類名相同的無參構造,但是如果我們定義了一個帶參構造,系統將不生成無參構造,但是在
????????????? 真正的開發中建議大家定義兩個構造函數,一個無參構造和帶參構造
????
public class SE {public SE() {}public SE(string id,string name,int age,Gender gender,int popularity) {Id=id;Name=name;Age=age;Gender=gender;Popularity=popularity; } }
????(2)方法的重載
??????? 在同一個類中,如果有多個方法方法名相同,但是參數的個數,順序,類型不同的多個方法可以構成重載和方法的返回值類型沒有關系。
??????
public void Say(string name,int age) {}public void Say(int age,string name) {}
?? (3)對象間的交互
????
//遙控器類 public class RemoteControl {//開機public void TurnOn(Tv tv){tv.Open(); //調用電視機對象的開機方法}//關機public void TurnOff(Tv tv){tv.TrunOff();}//換臺public void ChangeChannel(Tv tv){Console.WriteLine("請輸入頻道:");string ChannelNo=Console.ReadLine();tv.Change(ChannelNo);} //電視機類 public class Tv {public boolean isOn=false; //是否開機//打開電視機public void Open(){if(isOn){Console.WriteLine("電視機已打開");}else{Console.WriteLine("成功打開電視機");isOm=true;}}//關機public void TurnOff(){if(isOn){Console.WrteLine("電視機正在關機");isOn=false;}else{Console.WriteLine("電視機已關閉");}}//換臺public void Change(string channelNo){if(isOn){Console.WriteLine("正在切到{0}臺",channelNo);}} //測試Main()方法static void Main(String[] args){RemoteControl controler=new RemoteControl();Tv tv=new Tv();//開機controler.TurnOn(tv);//切換頻道controler.ChangChannel(tv);//關機controler.TurnOff(tv);Console.ReadLine(); }