zoukankan      html  css  js  c++  java
  • C#:认识var

    var:弱化类型的定义。对于我这种菜鸟来说,很多时候不知道对象需要什么类型的时候,直接一var就o了。因为它能指示编译器根据初始化语句右侧的表达式推断变量的类型。其推断类型可以是内置类型、匿名类型、用户定义类型、.NET Framework 类库中定义的类型或任何表达式。

    《C#高级编程第七版》中在讲到泛型的类型安全的时候,用了下面一个例子:

    在一ArrayList类型的集合中添加一个整数、一个字符串和一个MyClass类型的对象;
    ArrayList list = new ArrayList();
    List.Add(44); 
    List.Add("mystring");
    List.Add(new MyClass());

    现在需要遍历集合中所有的元素。如果集合使用foreach进行迭代,而该foreach语句使用整数元素进行迭代,编译器会编译这段代码,但是会出现运行异常:因为集合中的元素并不能全部强制转换成int,

    foreach( int i in list)
    {
        Console.WriteLine(i);
    }

    那么此时就该我们的主角var发挥作用了:

    foreach( var i in list)
    {
        Console.WriteLine(i);
    }

    运行,OK,没问题。

    当我们单步调试上述代码的时候,发现i的值为44时,它的类型为object{int};当i的值为为mystring的时候,它的类型为object{string};当i的值为{Temp.MyClass}的时候,它的类型为object{Temp.MyClass}.

    我们可以发现,编译器自己根据其右侧的表达式推断出了变量i的类型。

     基于var以上的特性,因此我们在使用的时候要注意:

    1.初始化时要赋值:
     如var i= 123;
     不能:var i;
          i = 123//编译器需要根据其右边的表达式推断i的类型
    
    2.初始化赋值后,就不能再更改值得类型了:
     var i = 123//i的类型已经确定了为int
     i= "mystring"; //error:无法将类型string隐式转换成int
    
    3.var要求是局部变量。
    
    4.var定义变量和object不同,它在效率上和使用强类型定义方式定义变量完全一样。
  • 相关阅读:
    1.1.24 制作红头文件
    1.1.23 文档页末空白行删不掉
    kernel enable specific directory DEBUG
    kernel lcd blank interface
    git show (15)
    git log (14)
    Android bootchart (一)
    kernel parameter [nosmp | maxcpus=0]
    kernel get clock info
    kernel bootargs consoleblank
  • 原文地址:https://www.cnblogs.com/Alvin-x/p/3285515.html
Copyright © 2011-2022 走看看