型別與型別的分類(.NET FrameWork底層結構)
| 前言:int a=5;// a是一個變數,它的本質是一個System.Int32結構體的物件實體 |
型別到底是什么:型別是任何編程語言最底層的東西(所以每當提到XX是型別,不要想它的繼承關系,因為它是代表底層的資料或資料結構)
型別是一組關鍵字,它同于宣告一個識別符號的基本資料型別或者抽象資料結構型別; 型別決定了一塊記憶體到底要存什么樣的資料/資料塊或要刻畫什么樣的資料結構模板;
在.NET中,型別關鍵字和其他關鍵字一樣,用藍色字體
1)基本資料型別:基本資料型別型別聲名的識別符號稱為變數,變數用來直接用于存盤資料的值 基本資料型別的宣告可以在資料結構型別中和方法體中,不允許定義在命名空間里 基本資料型別的定義就是一個定義變數的程序;
值型別:值型別的基本資料型別宣告的變數直接存盤值;(int,float,char,bool) 參考型別:參考型別的基本資料型別宣告的變數用于存盤對值(物件)的參考;(string、陣列、object)
2)抽象資料結構型別:抽象資料結構的型別可以定義在命名空間中和資料結構型別中,不允許定義在方法體中
| 類是一個資料結構,我們把class,interface,delegate,struct,enum具有平行關系的(可以用于宣告變數的)型別宣告關鍵字統稱抽象資料結構型別 |
值型別:值型別的抽象資料結構型別所宣告的型別的物件,他的值將用于直接存盤物件實體的值;(Struct,Enum);
參考型別:參考類的抽象資料結構型別所宣告的型別的物件,它的值是一個對物件實體的參考(class,Interface,delegate)
| 基本資料型別和抽象資料型別都分為值型別和參考型別, 它們的值型別直接存盤(變數的值)/(物件的實體); 它們的參考型別存盤(對值的參考)/(對物件實體的參考); |
| 規范化語言(更利于我邏輯清晰的理解知識) 1.當我們使用型別關鍵字宣告一個模板或一個變數時,稱這個模板/變數就是這個型別關鍵字,例如: class A{},稱A是一個類/ A是型別別的; delegate void B{},B是一個委托/ B是委托型別的 GameObject Go;Go是一個GameObject/ Go是GameObeject型別的 string s;s是一個字串/ s是字串型別的 |
.NET中型別的隱式繼承關系:(萬物皆物件)
隱式繼承在宣告一個基本資料型別的變數或一個抽象資料型別的模板之后自動完成;當使用基本資料型別關鍵字宣告一個變數時,這個變數的值就是.Net中一個封裝好的類(結構體)的實體
當使用抽象資料結構型別關鍵字宣告一個模板時,.NET會讓這個變模板會自動的按照后面的路徑隱式繼承在.NET中已經封裝好的類/介面tips:一些型別的隱式繼承關系按F12是看不到的 ,必須在.NET檔案中才能查看
1)值型別的隱式繼承關系:(inherited by ValueType->Object) 使用值值型別宣告的關鍵字是一個變數/物件,變數用于直接存盤值;c#中,所有的值型別都隱式繼承自ValueType)下面表述了值型別的繼承層次
基本資料型別:int關鍵字->Int16(struct)/Int32(Struct)/Int64(Struct)->System.Valuetype->System.Object
| 上述含義是指:當使用int關鍵字宣告一個整型變數時,這個變數本身是.NET中封裝好的Int32結構體的一個物件; |
抽象資料結構型別
enum關鍵字->System.Enum(abstrct class)->System.ValueType->System.Object(Class)
| 上述含義是指,當使用Enum關鍵字宣告一個列舉時,.NET會讓這個列舉會自動的按照后面的路徑隱式繼承在.NET中已經封裝好的類/介面,下同 |
2)參考型別的隱式繼承關系:基本資料型別:string關鍵字->System.String(class)->System.Object[]陣列->System.Array(class)->System.Object
抽象資料結構型別:class關鍵字(未顯示宣告繼承關系時)->System.Object
| 上述含義是指:當使用class關鍵字宣告一個類時,這個類會自動繼承自.NET中已經封裝好的基類Object |
| 理解:使用c#等面向物件語言,萬物皆物件不只是口號,更體現在了.NET FrameWork底層的類層次結構中; 1.所有用基本資料型別所宣告的變數的本質:是其對應的已經封裝好的類/結構體的物件; 例如:string宣告的字串變數本質是System.String類的物件; 操作:string s="";//使用F12會搜索到System.String類,說明s是System.String類的物件 2.所有的抽象資料結構型別所宣告的模板,本質上都繼承了已經封裝好的類(interface除外,它沒有繼承自任何已封裝好的類/結構體); 例如:delegate宣告的委托,本質上是繼承自System.Delegate類 當我們使用抽象資料型別宣告時,我們實際上是在建立模板; 當我們使用基本資料型別或模板名宣告時,我們實際上是在創建模板的實體; 所以說,不管是基本資料型別宣告的變數,還是模板的實體, 本質上都是類/結構體/介面的物件實體,即萬物皆物件 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/228225.html
標籤:C#
