程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#基礎知識篇(五)-----------C#筆記

C#基礎知識篇(五)-----------C#筆記

編輯:C#入門知識

C#基礎知識篇(五)-----------C#筆記


一.值類型和引用類型   1>值類型和引用類型將我們學過的數據類型劃分成了兩部分. 劃分的依據是不同類型的數據在內存中(堆棧)存儲的結構不同.   2>值類型:所有的數值類型:long int short byte ulong uint ushort sbyte decimal duoble float char bool 枚舉 結構   3>引用類型:string,arry(數組),類(class)   4>不管是值類型還是引用類型賦值都是將數據copy一份將副本賦給變量,不同的是值類型拷貝的是真實值,引用類型拷貝的是變量的內存地址,       即:值類型賦的是真實值的副本,那麼一個變量的值改變而不影響另一個變量的值;而引用類型因傳遞的是內存地址(即:都同時指向一個變量),若一個變量的值發現改變另一個的值也發生改變。   5>Null值,只能是引用類型的值。如果一個引用類型變量的值為:Null就代表他沒有指向任何對象。     二.常量   1> 什麼叫做常量?被const修飾的數據叫做常量。   2> 語法:const 數據類型 常量名稱=值;   3> 常量一旦聲明,他的值就無法改變。(即:一旦聲明就必須賦值,因為常量就是在聲明後不能修改,則只能在定義是賦值)   4> 我們聲明1個常量,在編譯器編譯的時候,會將聲明常量的那句話去掉,然後在使用到常量的值的地方用常量的值直接代替。所以就算可以改變,也沒有效果.也沒有任何意義.   5> 常量聲明的同時就必須要為其賦值,常量的賦值不能有變量參與,因為變量的值在運行的時候才確定,若可以那就違背了常量的定義。即:常量編譯時已確定,變量運行時才確定。   三.Readonly(只讀)   1> readonly只能用來修飾字段,不能修飾局部變量。(因為readonly只能在構造函數中賦值,即:創建對象的時候。而局部變量是在方法(實例方法)被調用的時候聲明和創建等方法結束後銷毀,        即時間段:在創建對象之後。)   2> 只讀子段只能取值不能改值。   3> 如果我們在為類聲明字段的同時為字段賦了初始值,但是在C#編譯器編譯的時候,它會將賦值的代碼放在構造函數中。因為為字段賦值的代碼,是執行代碼 只有CPU執行才會有效果.   4> 只讀字段的值 只能在構造函數中改變,其他的地方不能改變   5> Readony和const的區別?const是編譯時要確定值,而readonly可以在運行時確定。(編譯在前運行在後,因為代碼會先經編譯器編先檢查語法,再進行編譯成一個程序集然後再運行)   6> 在編譯時可以確定值則用const,在運行時才能確定用readonly.   四.枚舉   1> 語法:               訪問修辭符 enum 枚舉名 :整形的類型(指定枚舉值對應整型數的類型)               {                            枚舉成員                   }   2> 在枚舉中定義枚舉成員其中用逗號分隔   3> 枚舉的值的類型只能為枚舉型,不能帶雙引號(帶雙引號就是字符串),也不能為int型否則起沖突。   4> 枚舉裡面只能定義枚舉項,而每一個枚舉項都有與之對應的一個int數,這個數從0開始一次遞增(默認)。           a. 我們可以使用強制轉換的語法 將1個枚舉類型的變量的值 強制轉換為其所對應的int類型的數值                 例:                         Direction dir = Direction.North;(Direction為枚舉類型)                         int i = (int)dir;           b. 我們可以使用強制轉換的語法,將1個int類型的數據轉換為其所對應的枚舉值.                 例:int i = 3;                       Direction dir = (Direction)i;           c. 我們可以手動的為每1個枚舉值指定對應的int類型的數據. 在聲明枚舉值的時候 通過賦值符號 為其指定1個int類型的數.   5> 將字符串轉換成枚舉型            1>區分大小寫                 (轉換的枚舉類型)Eum.Parse(typeof(轉換的枚舉類型),待轉換的字符串)            2>不區分大小寫                (轉換的枚舉類型)Eum.Parse(typeof(轉換的枚舉類型),待轉換的字符串,true)   6> 枚舉是個值類型,我們一般把枚舉定義在跟類一個級別,因為這樣整個命名空間都可以訪問它。當然也可以定義在類中。   五.結構   1> 結構和類特別相似,在結構中可以定義字段,方法,屬性,構造函數。(因為結構是在C中傳承下來的,而C是面向過程的)   2> 結構體也需要創建對象來對結構中的成員進行調用,與類的區別是結構體可以通過new關鍵字來創建,也可以不通過new關鍵字來創建,聲明一個結構類型的變量就可以了,       這個變量就是一個對象(結構只是與類非常相似並不是一樣,還是有語法區別的)。通過對象名點成員來調用。   3> 聲明語法:                   [訪問修飾符] struct 結構名稱                  {                       結構成員;                     }     4> 結構和類的區別:            a. 類是class聲明 結構體是struct聲明            b. 結構體中雖然可以聲明字段,但是聲明字段的同時不能給字段賦值.否則報錯。            c. 結構體中雖然可以定義構造函數,但是你不能寫1個無參數的構造函數. 因為無論如何 編譯器多會為結構體生成1個無參數的構造函數.            d. 在結構體的構造函數中,必須要為這個結構體對象的每一個字段賦值.            e. 在創建結構體對象的時候. 可以使用new關鍵字來創建. 但是我也可以不使用new關鍵字. 使用new關鍵字來創建對象: 結構體中所有的字段就已經有值了.可以直接使用. 不使用new關鍵創建對象:                結構體中的字段沒有值,所以在使用字段的值之前 必須要為字段賦值. 原因在於: 使用new關鍵字創建對象 調用了構造函數,而結構體的構造函數要求必須為所有的字段賦值, 哪怕是它自己生成的無                參數的構造函數(為所有的字段賦默認值). 所以使用new關鍵字創建結構體對象 這個結構體對象的所有的字段都已經有值了. 如果直接聲明1個結構體變量而不使用new關鍵字,沒有調用構造函數,                所以字段也就沒有值.            f. 在構造函數中為屬性賦值,編譯器不認為是在對字段賦值,因為屬性不一定是在操作字段。            g. 結構體是1個值類型.類是1個引用類型.   5> 結構體是一個值類型. 在創建結構體對象的時候,結構體對象直接存儲在變量中. 結構體變量之間相互賦值的時候,是逐個拷貝字段的值.   六.垃圾回收(GC)   1> 我們聲明變量,創建對象都會在內存中開辟空間,因為內存有限所以這些空間必須回收,不回收會死機,會內存溢出,這就是垃圾回收的意義。   2> C#托管代碼不需要擔心內存的回收,因為系統以及.Net框架會幫助我們完成這些.   3> 棧空間的局部變量會在程序執行他們所在的大括符結束時會被系統立即被回收。   4> 堆空間的對象在沒有任何變量指向他時,就會被標記成垃圾對象。等待垃圾回收器(GC)的回收,GC屬於CLR的。GC回收垃圾的頻率是由CLR控制的,程序員無法干預。   5> GC.Collect();立即要求GC來回收堆空間中的垃圾對象。   6> 棧空間的局部變量若要想提前回收,則需要在回收的局部變量外加“{}“,如:         {              int a=100;             Console.WriteLine(a);             在這裡只用a一次後面都不用了,就把a立即回收掉。         }   七.析構函數(終結者函數)   1.> 語法:                 ~ 類名()                {                     方法體;              }   2.> 析構函數不能帶參數 不能帶訪問修飾符;析構函數在對象被GC回收的時候.自動執行;   3.> 在對象創建的時候  會執行構造函數  在對象被回收的時候 會執行析構函數. 析構函數的作用:一般情況下我們做一些善後工作.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved