所有類型最終都從System.Object類型派生。 最基本方法(object的公共方法): 1.Equals:如果兩個對象具有相同的值,返回true. 2.GetHashCode:返回對象值得一個哈希碼,如果某個類型的對象要在一個哈希表集合眾作為key使用,該類型應重寫該方法。 3.ToSting ...
所有類型最終都從System.Object類型派生。
最基本方法(object的公共方法):
1.Equals:如果兩個對象具有相同的值,返回true.
2.GetHashCode:返回對象值得一個哈希碼,如果某個類型的對象要在一個哈希表集合眾作為key使用,該類型應重寫該方法。
3.ToSting,返回一個String對象
4.GetType:返回從Typt派生的一個對象實例,指出該對象是什麼類型。返回的type對象可以和反射類配合使用,從而獲取與對象的類型有關的元數據信息。
以下為受保護的方法
5.MemberwiseClon:非虛方法,能創建類型的一個新實例,並將新對象的實例欄位設與this對象的實例欄位完全一致,返回的是一個對新實例的一個引用。
6.Finalize:在垃圾回收時會調用該虛方法。
關於new操作符 曹衍濤
Employee e=new Employee("ConstructorParam1");
1.他計算類型及其所有基類型中定義的所有實力欄位需要的位元組數。 堆上每一個對象都需要一些額外成員——“類型對象指針(type object pointer)
”和“同步索引塊(sync block index)”,這些成員由ClR(common language runtime)用於管理對象。這些額外成員的位元組數會計入對象大小。
2.他從托管堆中分配製定類型要求的位元組數,從而分配對象的記憶體,分配的所有位元組都設為零。
3.他初始化對象的類型對象指針和同步索引成員。
4.調用類型的實例構造器,向其傳入在對new的調用中制定的任何實參。(上邊ConstructorParam1即為實參)
new執行完這些操作後會返回指向新建對象一個引用(或指針)。上邊這個引用會保存到變數e中,後者具有Employee類型
無法顯示釋放分配給一個對象的記憶體,CLR採用垃圾回收機制。
類型轉換
CLR最重要的特性之一就是類型安全性。
c#可以隨意將一個對象轉換為他的任何基類,當將該類型轉化為他的派生類時需要進行顯示轉換,該轉換可能會在運行時失敗。
使用is和as操作符來轉型
is檢查一個對象是否相容於指定類型,返回true或false,is操作符不會拋出異常。
Object o=new Object();
Boolean b1 =(o is Object)//返回true
Boolean b2 =(o is Employee)//返回false
如果對象引用為null,總是返回false
is通常這樣使用
if(o is Employee)
{
Employee e=(Employee) o;
//在if剩餘語句中用e
}
這樣寫CLR實際檢查了兩遍數據類型
as為其簡化寫法
Employee e= o as Employee;
if(e!=null)
{
//剩餘語句用e
}
這樣寫CLR檢查o是否相容Employee,是的話返回同一對象的非null引用。