程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> CLR筆記:4.類型基礎

CLR筆記:4.類型基礎

編輯:關於.NET

4.1 所有類型都派生自System.Object

System.Object提供的方法:GetType(),ToString(),GetHashCode(),Equals(),MemberwiseClone (),Finalize()

所有對象都是用new操作符創建,創建過程:

1. 計算對象大小,包括“類型對象指針”和“同步塊索引”

2.從托管堆分配對象的內存

3.初始化對象的“類型對象指針”和“同步塊索引”

4.調用ctor,傳入相應參數——最終會調用到System.Object的ctor,該ctor是空操作

5.返回新對象的引用/指針

4.2 強制類型轉換

類型安全,CLR的最重要特性之一。

1.對象轉成其基類,不需要任何特殊語法,默認為安全隱式轉換

Object o = new Employee(); ——將new Employee轉為Object基類,可以看作:

Employee e = new Employee(); 
Object o = e;

2.對象轉成其子類,要顯示轉換    Employee e = (Employee)o;

但是,即使顯示轉換,也會在運行期錯誤

基於以上原則,有 類型安全性檢測: http://www.cnblogs.com/Jax/archive/2007/08/05/844159.html

is和as操作符

is:檢查一個對象是否兼容於指定的類型,並返回一個bool值——即使類型不對,僅返回false,不會 拋出異常;null對象則返回false

if (o is Employee)

            {
                Employee e = (Employee)o;

            }

上述代碼檢測兩次對象類型,一次在if中的is,另一次在顯示轉型時——會影響性能,使用as代替。

as:用來簡化上述代碼:永遠不會拋出異常,如果對象不能轉型,就返回null:

Employee e = o as Employee;
            if (e != null)
            { 
                //執行操作

            }

4.3 命名空間和程序集

CLR不知道namespace概念,using是C#的語法,CLR只認識類型的全稱

C#會自動在MSCorLib.dll中查找所有核心FCL類型,如Object,Int32,String

記住以下語法:using System = NameSpaceAnotherName;

4.4 運行時相互關系

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