zoukankan      html  css  js  c++  java
  • C#学习(二)

    c#包含两大数据类型:值类型和引用类型。值类型包括简单类型、结构体类型和枚举类型,引用类型包括自定义类、数组、接口、委托等

    内存基本被划分为两大部分:堆和栈。

    从内存分配上来看,值类型通常分配在线程的堆栈上,作用域结束时,所占空间自行释放,效率高,无需进行地址转换,而引用类型通常分配在托管堆上,由GC来控制其回收,需要进行地址转换,效率降低,这也正是c#需要定义两种数据类型的原因之一。
    值类型均隐式派生自System.ValueType,而System.ValueType又直接派生于System.Object,每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值,注意所有的值类型都是密封(sealed)的,所以无法派生出新的值类型。而且System.ValueType本身是一个类类型,而不是值类型,因为它重写了object的Equals()方法,所以对值类型将按照实例的值来比较,而不是比较引用地址。

    注:栈是操作系统分配的一个连续的内存区域,用于快速访问数据。因为值类型的容量是已知的,因此它可存储在栈上。而托管堆是CLR在应用程序启动时为应用程序预留的一块连续内存区,是用于动态内存分配的内存区,引用类型的容量只有到运行时才能确定,所有用堆来存储引用类型。

    struct和class的区别

    struct是值类型,class是引用类型,因此它们具有所有值类型和引用类型之间的差异。由于堆栈的执行效率要比堆的执行效率高,但是堆栈资源却很有限,不适合处理逻辑复杂的大对象,因此struct常用来处理作为基类型对待的小对象,而class来处理某个商业逻辑。
    从继承性来看,struct既不能继承也不能被继承,但是可以实现接口,而Class就可以完全扩展了。
    内部结构有区别,struct只能添加带参的构造函数,不能使用abstract和protected等修饰符,不能初始化实例字段,但是值得注意的是,struct可以重写System.Object的3个虚方法,Equals()、ToString()和GetHashTable(),Class没有这些限制。
    比较struct和class的不同,可以得出以下几条struct和class的使用原则:

    1 在表示诸如点、矩形等主要用来存储数据的轻量级对象时,首选struct。

    2 在表示数据量大、逻辑复杂的大对象时,首选class。

    3 在表现抽象和多级别的对象层次时,class是最佳选择。

    类型转换

    C#允许将范围较小的某种类型的值赋给范围较大的目标类型

    而窄化可能导致数据丢失,需要用check关键字来抛出异常

    流程控制

    switch 只能作用于类型为可静态执行的表达式,只限于基本类型,string类型和enum类型,每一条case从句的末尾都必须使用跳转语句

    for循环:初始化从句;条件从句;迭代从句

    foreach:遍历一个可枚举对象的每一个元素

    跳转语句:在跳转目标之前跳出try语句块,则始终会执行finally的语句块

    break:用于结束循环体中的循环

    continue:放弃本次循环中的余下语句,提前下一次的迭代过程

    goto语句:转向语句块中的另一个标记的位置开始执行

    return:存在于方法中,返回一个与该方法返回类型一致的表达式

    throw:抛出异常

  • 相关阅读:
    Delphi 打印纸张选项设置参数
    Windows win32 API 类库 硬件
    delphi 打印 PDevMode 说明
    Delphi GlobalAlloc、GlobalLock、GlobalUnlock、GlobalFree 函数
    delphi 设备函数GetDeviceCaps函数
    情感分析和数据集
    深度因式分解机
    因子分解机
    功能丰富的推荐系统
    序列感知推荐系统
  • 原文地址:https://www.cnblogs.com/lj940306/p/4028872.html
Copyright © 2011-2022 走看看