C#的基類和訪問修飾符
一. C#的基類System. Object
在面向對象編程過程中,所有的類都是超級父類System. Object類的子類。所有的類都自動繼承System. Object,自然也就繼承了System. Object類的所有方法,System. Object包含的方法有:
public static bool Equals(object objA,object objB){}
public static bool ReferenceEquals(object objA,object objB){}
public Object(){}
public virtual bool Equals(object obj){}
public virtual int GetHashCode(){}
public Type GetType(){}
public virtual string ToString(){}
protected virtual void Finalize(){}
protected object MemberwiseClone(){}
先要說明的是方法前面的修飾符public,static,protected,virtual,private等這些訪問修飾符的意義會在下面介紹,我們現在看下這些方法的具體的作用,但是這些方法中的很多基本上很少用到,用的比較多的是ToString()和GetHashCode()這兩個方法。
ToString()方法:是將調用該方法的對象轉換成字符串再賦值給其他的變量
double f = Math.PI;
string Tostring = null;
Tostring = f.ToString();
Console.WriteLine("double f={0}",f);
Console.WriteLine("調用Tostring = f.ToString()");
Console.WriteLine("Tostring={0}", Tostring);Console.WriteLine("調用之後d的值={0}",f);
左邊程序運行後的結果截圖如下:
GetHashCode()方法:用作特定類型的哈希函數。GetHashCode 適合在哈希算法和數據結構(如哈希表)中使用
String string1 = "ludei";
String string2 = "ludei";
String string3 = string1;
Console.WriteLine("str1.GetHashCode{0}", string1.GetHashCode());
Console.WriteLine("str2.GetHashCode{0}", string2.GetHashCode());
Console.WriteLine("str3.GetHashCode{0}", string3.GetHashCode());
GetType()方法:這個方法返回從System. Type派生的類的一個實例。這個對象可以提供對象所屬類的更多信息,包括基本類型、方法、屬性等。
Finalize()方法:在引用對象被回收、以清理資源時調用。Finalize()方法的Object執行代碼實際上什麼也沒有做,因而被垃圾收集器忽略。如果對象擁有對未托管資源的引用,則在該對象被刪除時,就需要刪除這些引用,此時一般要重寫Finalize()。垃圾收集器不能直接重寫該方法,因為它只負責托管的資源,只能依賴用戶提供的Finalize()。
Equals(object objA,object objB)和ReferenceEquals(object objA,object objB)這兩個方法的返回值是bool,比較兩個對象是否是一樣的對象。區別是
Equals(object objA,object objB):如果進行比較的兩個引用指向的是同一個對象,則方法返回true;否則返回false;而,ReferenceEquals方法用於判斷兩個引用是否指向同一個對象,也就是引用相等
二.C#的訪問修飾符
C#的訪問修飾符有一下幾個:protected, private, public, internal, protected internal。在類或者類的成員之前加上這些修飾符就會限制程序對加有修飾符的代碼的訪問權限。現在把有關修飾符的方法特性介紹下:
Public,選擇它的方法是在成員聲明中包括 public 修飾符。public 的直觀含義是“訪問不受限制”。所有的代碼都可以訪問
Protected,選擇它的方法是在成員聲明中包括 protected 修飾符。protected 的直觀含義是“訪問范圍限定於它所屬的類或從該類派生的類型”。
Internal,選擇它的方法是在成員聲明中包括 internal 修飾符。internal 的直觀含義是“訪問范圍限定於此程序”,也就是目前的程序才可以訪問。 Protected internal(意為受保護或內部的),選擇它的方法是在成員聲明中包括 protected 和 internal 修飾符。protected internal 的直觀含義是“訪問范圍限定於此程序或那些由它所屬的類派生的類型”。
Private,選擇它的方法是在成員聲明中包括 private 修飾符。private 的直觀含義是“訪問范圍限定於它所屬的類型”。 如果在編程過程中對類或者成員不加修飾,默認的就是這個。
有關值類型和引用類型的概念:如果一個變量va1存儲的是值類型,則它直接存儲包含數據的對象。任何其他的變量都不能直接存儲已經由va1存儲了的對象,雖然var2可以存儲一個和var1存儲的對象有著相同值的對象,但這意味著,和存儲的對象毫不相干,任意改變其中一個存儲的對象都不會影響到另一個變量存儲的對象。如果變量var1存儲的是一個引用類型,它直接存儲一個指向對象的引用,同時可能存在另一個變量var2,它也存儲著指向這個對象的引用,這意味著,改變var2引用的對象同時也會影響到var1引用的對象.這裡只做個簡單的介紹,以後會詳細舉例說明。