C#數據類型知識點

C#數據類型知識點

  1. 淺複製:複製一個對象的時候,僅僅複製原始對象中所有的非靜態類型成員和所有的引用類型成員的引用。(新對象和原對象將共享所有引用類型成員的實際對象)

  2. 深複製:複製一個對象的時候,不僅複製所有非靜態類型成員,還要複製所有引用類型成員的實際對象。
    http://www.cnblogs.com/edisonchou/p/4787775.html

  3. string a=“aaa”+"bbb"+"ccc"只在內存分配了一個堆(aaabbbccc)和一個棧(a)。 string a="aaa"; a+="bbb"; a+="ccc";
    該過程會創建多臨時變量。 所以儘量使用@或${變量}拼接 ,不要使用“+”來拼接。

  4. 一個公共的靜態變量將一直被GC視爲一個在使用的根引用。更糟糕的是:當這個對象內部還包含更多的對象引用時,這些對象同樣不會被釋放。

  5. NET中無論是存儲值類型對象的數組還是存儲引用類型的數組,數據都會存儲在堆上。

  6. Array.ConvertAll()。數組類型轉換,不要遍歷每個對象依次轉換。例:將一個字符串數據轉爲時間數據。

var strArr = new string[] { "2015-02-03","2015-03-11" }; 
DateTime[] dtArr = Array.ConvertAll(strArr, new Converter<string, DateTime>(p => DateTime.Parse(p)));
  1. 一個泛型參數最多一個主要約束,主要約束可以是一個引用類型、class或者struct。次要約束可以有多個接口。

  2. 對象序列化器 BinaryFormatter 、SoapFormatter、XmlSerializer。Soap是一種引用層網絡協議。Web Service就是基於此協議。
    Serializable和NonSerialized特性在XmlSerializer類型對象的操作中完全不起作用。取而代之的是XmlIgnore。

  3. dynamic 是.net4.0的動態類型,在編譯時會編譯爲object類型。是運行時檢測類型 所以會繞過IED的錯誤檢測。
    dynamic 不能跨程序集訪問,傳參:因爲匿名類型默認是private 的,所以在B程序集中定義的匿名類型,A程序集是無法直接獲取其成員信息的,因而無法輸出。使用元組Tuple代替。

            dynamic dy=0;
            dy = dy + 3;//不報錯
            object ob = 0;
            ob = ob+3;//報錯
  1. 靜態方法和非靜態方法的區別是什麼? 區別就在創建對象的時候,靜態方法就一份,而非靜態方法每new一個新對象就會把這個實例相關信息在GC Heap上覆制一份,同時把new出的新對象放在堆棧上。堆棧指針指的地址是剛剛複製到GC Heap的內存地址。因此在方法調用速度上,靜態方法要快一點,因爲非靜態方法要實例化,分配內存。
    從編程歷史上看,早期的結構化編程幾乎所有的方法都是靜態方法,引入實例化方法是面向對象編程以後的事情了,所以實例化方法不是解決運行效率問題,內存問題。是爲了讓開發更加模式化,面向對象化。

    從上面的分析就可以得出一個結論:1,靜態方法和非靜態方法是解決模式的區分。2,如果不考慮繼承,多態或如果一個方法和它所在類的對象無關,就應該選擇靜態方法,比如工具類。  https://www.jianshu.com/p/ca544c926eb2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章