學習大神博客鏈接: http://www.49028c.com/zhili/category/421637.html
一 值類型與引用類型
需要注意的string 是特殊類型的引用類型.
使用方法: == 比較的是棧里面的值, 值類型比較值, 對象(除字符串)比較的是棧里面的地址.
equal比較的是實際的值,是object里面的虛方法重寫,重寫時最好重寫getHashCode()方法.
如下為代碼例子
static void Main(string[] args) { object m1 =1 ; object m2 = 1; Console.WriteLine(m1==m2); // False;因為比較的是引用,肯定不是同一個對象. Console.WriteLine(m1.Equals(m2)); //True. 因為比較的是對象對應的值. Console.Read();}例子2: static void Main(string[] args) { string str1 = "ZhangSan"; string str2 = "ZhangSan"; string str3 = new string(new char[] { 'z', 'h' }); string str4 = new string(new char[] { 'z', 'h'}); Console.WriteLine("str1 == str2 " + (str1 == str2).ToString()); //True Console.WriteLine("str1 Equals str2 " + str1.Equals(str2));//True Console.WriteLine("str3 == str4 " + (str3 == str4).ToString());//True Console.WriteLine("str3 Equals str4 " + str3.Equals(str4)); //True. Console.Read(); } //總結: 因為string重寫了==方法.用于比較值.
二 Typeof 和 GetType() 區別
static void Main(string[] args) { object m1 = 1; object m2 = 1; // ValueType是引用類型,因為它是類,所以返回為false Console.WriteLine(typeof(ValueType).IsValueType); //False. ValueType是類!!! Console.WriteLine(m1.GetType().IsValueType);//Ture Console.Read(); }
三 靜態與非靜態.
說的比較透徹的是, 鏈接: ([C#基礎知識系列]全面解析C#中靜態與非靜態)http://www.49028c.com/zhili/archive/2013/06/16/StaticAndNonStatic.html
個人使用總結: 想不實力化類-->創建靜態類-->靜態屬性-->靜態成員是PRivate的-->使用靜態方法一般用于作為通用的工具類來實現.
文中總結有: 1, 靜態方法不能被標識為virtual、abstract或override,靜態方法可以被派生訪問,但是不能被派生類重寫.
2, 構造函數執行過程:
靜態成員分配內存空間-->靜態成員初始化-->執行靜態構造函數-->執行實例成員初始化-->執行實例構造函數
IL 中.ctor代表實例構造器.
四 參數傳遞
對于按值傳遞,不管是值類型還是引用類型的按值傳遞,都是傳遞實參的一個拷貝.
只是值類型時,此時傳遞的是實參實例的一個拷貝(也就是值類型值的一個拷貝)
而引用類型時,此時傳遞的實參引用的副本。
對于按引用傳遞,傳遞的都是參數地址,也就是實例的指針.(加ref and out 關鍵字)
注意: string 是特殊的引用類型. 傳遞是實際的值,想要方法傳遞引用, 即外面的值發生改變, 需要加ref out 參數.
新聞熱點
疑難解答