zoukankan      html  css  js  c++  java
  • .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的值不变。如下有示意图:

  • 相关阅读:
    How to get the IIS root path in other application.
    Web.UI.Controls与页面事件的冲突问题。
    分析在服务器上设置计时器的问题。
    首次感觉我的电脑过时了。。。。。。。。郁闷。
    Google Logos
    2005年的最后一天
    TreeView的几个使用小技
    浅淡反射问题
    The restricted headers are:
    在服务器上用Timer遇到的小问题。。。。
  • 原文地址:https://www.cnblogs.com/crazyghostvon/p/TickKnowledge.html
Copyright © 2011-2022 走看看