.Net 零星小知识
生活随笔
收集整理的這篇文章主要介紹了
.Net 零星小知识
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 深拷貝和淺拷貝
單純講這兩個詞,其實不容易記住區別,但是看看他們對應的英語單詞就顯而易見了:
深拷貝: Clone
淺拷貝: Copy
記住了這個,下面在看看詳細一點的信息:
Copy: 只是復制了一個引用,就像object類型的復制,我們用
Object a = New Object(); Object b = a; //b is a copy of a這里b就是a的copy,b==a 會返回true;
而clone就是照著模特完全造一個一模一樣的出來,這時需要實現ICloneable.Clone方法。
ICloneable a = New CloneableObject(); ICloneable b = a.Clone(); //b is cloned from a這時候b==a會返回false。
?
2. lock的用法
lock(new object()) //這里一定要給引用類型變量 {object a = new object ();}當然,如果你真按上面這個寫法去寫,這段代碼沒有任何同步效果,它每次都會試圖鎖一個全新的不同的對象,這一定會成功。
?
3. Object 與 object
Object 是一個類,碰巧這個類是.Net里所有類的基類,它就是盤古。這個類這么特殊,那我們給他一個關鍵字好了,那就叫object吧。
?
4. 裝箱和拆箱
一個經典的裝箱拆箱案例:
static void Main(string[] args){ValueTypeT t = new ValueTypeT();t.a = 5;Object o = t; //boxing ((ValueTypeT)o).SetA(6); //unboxing, t.a is not set. Console.ReadKey();}public struct ValueTypeT{public int a;internal void SetA(int p){this.a = p;}}在裝箱的時候,o.a的值是從t copy過來的,當需要調用SetA方法的時候,需要拆箱,將o 完全拆出來,然后就跟o沒有關系了,這是調用了這個結構體的SetA方法,已經與o完全沒有關系了,所以o的值不變。如下有示意圖:
?
轉載于:https://www.cnblogs.com/crazyghostvon/p/TickKnowledge.html
總結
以上是生活随笔為你收集整理的.Net 零星小知识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET Core SignalR Re
- 下一篇: 行为型模式之责任链模式