zoukankan      html  css  js  c++  java
  • 艰难的道路

      不为自己被淘汰找借口,因为自己还不够努力,因为自己很自大,因为自己的心浮气躁,因为自己的无知天真,职场不同于大学,这是一个真正的战场,你不去奋斗,到头来苦的还是自己,就拿C#中的很多语法糖而言,自己能够不看代码,不看书本,不看笔记,凭借自己的印象说出来的也就那么几个,今天早上起床后吃了早饭,就开始学习anytao的<<你必须知道的.NET第二版>>,中间也遇到了不少的问题,苦于自己不会使用搜索引擎,很多东西都不知道怎么去查询关键字,只好在作者的博客发问了。

      这个点正在回顾装箱和拆箱的知识,在学校的时候这个知识点几乎没有理解,只知道在Console中写一个小Demo,然后也就骄傲的说我明白装箱和拆箱了,但是直到今天,我也只晓得一些最基础的概念,装箱是值类型转换为引用类型,拆箱是引用类型转换为值类型,伴随着装箱和拆箱付出的是性能的代价。
      就拿anytao引言中的小例子来说下自己对这块的理解,如果说的不正确的麻烦各位使劲的拍砖。

      public static void Main()

    {

      int i=100;

      object o=i;

         o=200;

      Hashtable ht=new Hashtable();

      ht.Add("I",i);

          ht["I"]=o;

          Console.WriteLine(i + " is original, " + (int)ht["I"] + " is changing. ");

    }

    发生了几次装箱,几次拆箱?

    首先object o = i;这个是值类型转换成引用类型,属于装箱操作。 o = 200,同样的也是值类型转换成引用类型,属于装箱操作。 ht.Add("I",i);这个应该也是装箱操作。

    (int)ht["I"],这个是引用类型转换成值类型的,属于拆箱操作的。

    第二个小例子是

    public static void Main()

    {

      float = 1.01F;

      object o = f;

      double d=(double)o;  //Convert.ToDouble(o)可是实现将object类型转换成值类型的

    }

    这段代码编译的时候没有任何问题,运行时会报未处理的InvalidCastException 指定的转换无效。

    因为只有被装过箱的对象才能被拆箱,而并非所有的引用类型。将并非装箱而来的引用类型强制转换成值类型,将会抛出InvalidCastException异常。

    说到着,才发现自己之前理解的装箱和拆箱概念上还是有很大的出入的,anytao讲解的很形象,很有价值,可能平时工作的时候很少关注这些,感觉自己把功能实现了就OK了,但是本质上还有很多很多的东西值得你去关注,今天天气很好,写一份看书笔记,希望这是一个好的开始。

    最后摘抄一下anytao书中的一段装箱就是值类型数据转换成无类型的引用对象,使得我们可以将值类型视为对象来处理,通常这种转换主要是指转换为System.Object类型或者该值类型实现的任何接口引用类型;而拆箱就是引用类型转换成值类型,通常伴随着从堆中复制对象实例的操作。

  • 相关阅读:
    波形捕捉:(9)写入到WAV文件
    C#基础回顾:GridView全选演示
    VS.net和Reflector 图标解释
    Dot Net屏幕传输 v1.0
    C#基础回顾:用GDI+绘制验证码
    波形捕捉:(8)使用“捕捉缓冲区”
    DirectX编程:C#中利用Socket实现网络语音通信[初级版本]
    DirectX编程:[初级]C#中利用DirectSound播放WAV格式声音[最少只要4句话]
    GroupingView控件 使用经验
    Dot Net下实现屏幕图像差异获取v2.0
  • 原文地址:https://www.cnblogs.com/purplecows/p/3438743.html
Copyright © 2011-2022 走看看