1.System.Object C#的所有類型都是派生自System.Object 也就是說下麵的兩個類型定義完全一致 System.Object有四個公共方法 Equals:比較兩個對象的值是否相等。 GetHashCode:返回對象的值的哈希值。 ToString:預設返回類型的完整名稱(thi ...
1.System.Object
C#的所有類型都是派生自System.Object
也就是說下麵的兩個類型定義完全一致
// 隱式派生自Object public class Person{ } { // 隱式派生自Object public class Person :Object{ }
System.Object有四個公共方法
Equals:比較兩個對象的值是否相等。
GetHashCode:返回對象的值的哈希值。
ToString:預設返回類型的完整名稱(this.GetType().FullName)。但經常重寫該方法來返回字元串(例如bool轉換成string)。
GetType: 返回調用此方法對象的類型。
static void Main(string[] args) { Console.WriteLine("Hello World!"); string str = "asd"; int i = 123; //預設返回類型 Console.WriteLine(str.GetType().FullName); //將Int轉換字元串 Console.WriteLine(i.ToString()); Console.ReadKey(); }
預設返回的是當前類型的完整名稱。
2.類型轉換
在實際工作中經常遇到需要將一種類型轉換為另一種類型。C#允許將對象的轉換為它的(本身)類型或者它的任何基類類型並這種轉換方式是安全可以直接轉換。但是將對象轉換為它的派生類時,要求顯示轉換,因為這種轉換可能會在運行時失敗。
public class Person{ } static void Main(string[] args) { Console.WriteLine("Hello World!"); string str = "asd"; int i = 123; //預設返回類型 Console.WriteLine(str.GetType().FullName); //將Int轉換字元串 Console.WriteLine(i.ToString()); // 不需要顯示轉換,因為person時Object的派生類 Object o=new Person(); // 需要顯示轉換,因為personObject的派生類.不強制轉換在編譯時拋出異常。 Person p=(Person)o; Console.ReadKey(); }
3.類型轉換符:is和as
這是另一種轉換方式。
is:is操作符永遠不會拋出異常,只會返回true和false。它的用意是檢查對象是否在指定的類型中。
Object o=new Object(); // is 檢查當前對象是否屬於指定對象 var b1=o is Object;// 返回true var b2=o is Person;// 返回false Console.WriteLine(b1); Console.WriteLine(b2);
is 操作符的通常用法:
// is 操作符的的通常用法 if( o is Person){ Person p=(Person) o; }
在轉換時會檢查兩次對象的類型,第一次is操作符會檢查o是否屬於Emplyoee。如果是則在if語句內部會在檢查o是否引用了一個Person。為瞭解決這個問題C#提供了as操作符。
as 操縱符:不同於is,在轉換成功時as會返回同一個對象的引用。失敗時則會返回NULL。所以只需要檢查變數是否為null就可以了。
Person p=o as Person; if(p!=null){ Console.WriteLine("as"); } // 拋出異常,因為是NULL。 p.ToString();View Code
拋出異常。
為了方便理解可以給自己出幾道題來測驗一下。