zoukankan      html  css  js  c++  java
  • 基础 - 结构

         可以把结构看做缩小的类,适合于把一些数据组合起来的场合。结构是值类型,因此new运算符与类和其他引用类型的工作方式不同。new运算符不是分配堆中的内存,而是调用默认的构造函数,在堆栈上把所有的字段初始化为默认值。对于下边的语句:

    TestStruct pt;
    pt.length 
    = 4;
    pt.width 
    = 2;


         如果TestStruct 是一个类,那么就会产生一个编译错误,因为pt包含一个未初始化的引用(未指向任何地方),所以不能给其字段赋值。但是对于结构,声明变量实际上是为整个结构分配栈中的空间,所以就可以赋值了。但注意下边语句会产生一个编译错误,

    TestStruct pt;
    Double d 
    = pt.length;


         这是因为虽然已经为结构分配的空间,但是变量并没有初始化。只有调用了new运算符或者给所有的字段分别赋值,结构才完成了初始化,也只有在此之后才能调用结构提供的方法。如下语句会产生一个编译错误:

    TestStruct pt;
    pt.print();


         由于结构是值类型,因此把结构作为参数来传递或把一个结构赋给另一个结构,结构中的所有内容都会被复制,这样一来,就会有性能上的损失,如果把结构做为ref参数传递,就可以避免性能损失,因为只传递了结构在内存中的地址。
         不能从一个结构中继承,也不能从任何类中派生。特别的一点是结构派生于System.Objec,因此结构能重写ToString()方法。在结构中声明方法的方式和在类中是一样的,但是不能把结构的任何成员声明为virtual(结构不允许被继承),也不能把结构声明为abstract或把结构显式的声明为sealed(结构总是隐式密封的)。
         不能为结构定义无参数的构造函数。在结构的定义中,也不能提供字段的初始值,以此来绕过默认构造函数,事实上默认的构造函数总是隐式地给出,即使提供了其他带参的构造函数。

    Key Points:1. 结构是值类型,而不是引用类型;
    2. 机构不支持继承,不能把结构的成员声明为virtual,把结构声明为abstract或显式的声明为sealed;
    3. 结构不允许定义无参数的构造函数;
    4. 在结构完成初始化之前,不能用结构的成员变量给其他变量赋值,也不能调用结构提供的方法;
    5. 把结构作为ref参数传递给方法,可以避免性能上的损失。
  • 相关阅读:
    对数据库文件信息进行批量删除
    php多条件查询
    实现条件查询
    在PHP中设置封装类文件
    php中什么是一维数组什么是二维数组
    登录注册的学习
    git系列---【git提交代码时,文件名过长导致报错:libgit2 returned: invalid path for filesystem】
    git系列---【初始工程文件太大或者文件数太多时,向远程仓库push时总是失败,如何解决?】
    git系列---【git的撤销命令】
    git系列---【git新建分支时,已经推送到远程,发现分支名错了,如何修改分支名,并推送到远程?】
  • 原文地址:https://www.cnblogs.com/ipqn/p/353947.html
Copyright © 2011-2022 走看看