zoukankan      html  css  js  c++  java
  • CSharpThinkingC# 要点(附加三)

    Part 1

    一.值类型和引用类型的误区

    1.结构是轻量级的类。

    错误,大多数时候结构交类中少了很多方法,略显轻便,但DateTime是返例,DateTime携带了计算方法。类中所带的方法是引用类型,并不会大量消耗内存。

    2.引用类型在堆上,值类型在栈上。

    错误,变量的值是在它声明的位置存储的,引用类型始终在堆上,值类型则可能在堆上也可能在栈上,具体取决于上下文。假定,一个类中有一个int类型的实例变量,在堆上(那么在这个类中的任何对象,总是在堆上)。

    3.对象在C#中默认是通过引用传递的。

    错误,涉及到一个引用类型时,可以以“引用”方式传递,也可用“传值”方式传递。引用类型作为方法参数时,参数默认是以“值传递”的方式来传递的,但值本身是一个引用。

    二.装箱和拆箱

    1.拆箱与装箱是Copy副本,改变原始值并不改变拆/装箱后的值。

    2.如果一个类型的值调用ToString、Equals、GetHashCode时,没有覆盖这些方法,将会发生装箱(基类方法为Object)。将值作为接口传递时也是如此。

    三.与委托有关

       C#1:实例方法,签名必须相同。

       C#2:方法组转换订阅事件。

       C#3:Lambda表达式、隐式转换+匿名委托、扩展方法。

       C#4:委托中支持泛型的协变和逆变,动态类型。

    Part 2

    一.泛型

    1.为什么需要泛型:无需每次强制转换C#1,减少拆箱与装箱操作(提升性能),IDE中集成检查(编译时检查,而不是在运行时)。

    2.List<T> 读作:List Of T ,仿VB。命名上Tkey ,TValue更有意义。

    3.泛型方法和泛型类型。

    4.类型约束:引用类型约束,值类型约束,构造函数类型约束,转换类型约束,组合约束。

    5.遇到泛型类型时,编译器会在编译未绑定的泛型类型时就解析好所有方法重载,而不是等到执行时。

    6.泛型迭代:IEnumerator<T>

    7.反射:typeof()

  • 相关阅读:
    收藏好博客
    iOS设备的重力感应
    局域网内通过UDP协议进行传输接受数据——AsyncUdpSocket
    定时器NSTimer的用法
    线程数:5,ramp-up:1,循环::10 和 线程数:10,ramp-up:10,循环数:1,这两种情况有没有区别?
    什么是性能测试?
    JMeter 之 XPath提取器
    DNS--安装&&配置文件
    DNS--简介&&解析过程
    Tomcat--隐藏版本号
  • 原文地址:https://www.cnblogs.com/cuiyansong/p/3054049.html
Copyright © 2011-2022 走看看