C#基础巩固之基础类型
注:以下筆記全摘錄自CLR via C# 3
1、所有類型都從System.Object派生:”運行時“要求每個類型最終都從System.Object派生。
2、System.Object提供了四個公共實例方法:
(1) Equals :如果兩個對象具有相同的值,就返回true。
(2) GetHashCode
(3) ToString:該方法默認返回類型的完整名稱(this.GetType().FullName)。然而,我們經常重寫這個方法,使它返回一個String對象,其中包含對象狀態的一個表示。例如,核心類型(比如Boolean和Int32)重寫了這個方法,返回他們值的一個字符串表示。
(4) GetType:返回Type派生的一個對象的實例,指出調用GetType的那個對象是什么類型。返回的Type對象可以和反射類配合使用,從而獲取與對象的類型有關的元數據信息。
3、System.Object的受保護方法:
(1) MemberwiseClone:這個非虛方法能創建一個類型的新實例,并將新對象的實例字段設與this對象的實例字段完全一致。返回的是對新實例的一個引用。
(2) Finalize:在垃圾回收器判斷對象應該被作為垃圾回收之后,在對象的內存被實際回收之前,會調用這個虛方法。
4、CLR要求所有對象都用new操作符來創建。以下是new操作符所做的事情。
(1) 它計算類型及其所有基類型(一直到System.Object,雖然它沒有定義自己的實例字段)中所有字段需要的字節數。堆上每個對象都需要一些額外成員,”類型對象指針“(type object pointer)和“同步塊索引”(sync block index)。這些成員由CLR用于管理對象。這些額外成員的字節數會計入對象大小。
(2)它從托管堆中分配指定類型要求的字節數,從而分配對象的內存,分配的所有字節都設為零(0)。
(3)它初始化對象的”類型對象指針“和”同步塊索引“成員。、
(4)調用類型的實例構造器,向其傳入在對new的調用中指定的任何實參。
5、順便說一句,沒有和new操作符對應的delete操作符;換言之,沒有辦法顯示釋放為一個對象分配的內存。
6、CLR最重要的特性之一就是類型安全性。(其它的重要特性呢?)
7、使用C#? 的is 和as操作符來轉型。
(1)is :用于檢查一個對象是否兼容于指定的類型,并返回一個Boolean值:true或false。注意:is操作符永遠不會拋出異常。如果引用對象是null,is操作符總是返回false,因為沒有可檢查其類型的對象。
is操作符通常像下面這樣使用(放到if判斷里面)
if( o is Employee){Employee e=(Employee ) o;//在剩下的代碼用e }這段代碼,CLR會檢查兩次對象的類型;is 操作符首先核實o是否兼容于一個Employee類型。如果是,那么在if語句內部執行時,CLR再次核實o是否引用一個Employee。(類型檢查增加了安全性,但是有性能損失)
(2)as:簡化is的寫法,同時提升性能(只校驗一次)。as的工作方式和強制類型轉換一樣,只是它永遠不會拋出異常,如果對象不能轉型,結果就為null。所以,正確的做法是檢查最終生成的引用是否為null。如果企圖直接使用最終生成的引用,會拋出一個System.NullReferenceException異常,以下代碼對此進行了演示:
Object o = new Object(); //新建一個Object對象Employee e = o as Employee; // 將o轉型為一個Employee//上述操作會失敗,不會拋出異常,但e會被設為nulle.ToString(); //訪問e會拋出一個NullReferenceException異常8、命名空間和程序集
命名空間(namespace)用于對相關的類型進行邏輯性分組,開發人員使用命名空間方便的定位一個類型。
在C#中,namespace的作用只是告訴編譯器為源代碼中出現的每個類型名稱附加空間名稱前綴,減少程序員的打字量。
命名空間和程序集的關系:
注意,命名空間和程序集不一定是相關的。特別是,同一個命名空間中各個類型可能是在不同程序集中實現的。例如,System.IO.FileStream類型是在MSCorLib.dll程序集中實現的,兒System.IO.FileSystemWatch類型是在System.dll程序集中實現的。
在一個程序集中,也可能包含不同命名空間中的類型。例如,System.Int32和System.Text.StringBuilder類型都在MSCorbLic.dll中。
轉載于:https://www.cnblogs.com/meng9527/p/9036575.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的C#基础巩固之基础类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 伴随解放军逐渐成长起来的中国式枪械
- 下一篇: Linux CentOS7 rsync通