zoukankan      html  css  js  c++  java
  • Struct 和class 的比较

    参考:https://blog.csdn.net/qiaoquan3/article/details/51234208

    1、struct 是值类型,创建一个struct类型的实例被分配在栈上。struct 实例的赋值,赋的值是值;struct作为参数类型传递,传递的是值。

    class 是引用类型,创建一个class类型实例被分配到托管堆上。class 实例的赋值,赋的是引用地址;class 作为参数类型传递,传递的是引用地址。

    2、struct 默认的访问权限是public,而class 默认的访问权限是private

    3、struct不能显式地声明无参数构造函数(默认构造函数)或析构函数,也就是struct声明的构造函数必须带有参数;而class 可以显式声明无参数构造函数来实现默认构造函数。

    4、如果class 中只声明了一个有参数的构造函数,则用new关键字创建实例时不能用无参构造函数,否则会出现‘XXX不包含0个参数的构造函数’的编译错误,表明class 中除非没有一个构造函数,否则声明了什么构造函数,就只能用什么构造函数。而struct中由于只能声明带参数的构造函数,当创建实例时 class 创建实例必须用new关键字,而struct可以用new,也可以不用new,区别在于new生成的struct中,struct的成员函数是有初始值的。

    eg:
    struct Point
    {
    float x;
    float y;
    }
    Point p = new Point();p是值类型所以应该在栈上为其分配空间
    float a = p.x; //编译通过,使用new 语句,C#结构体中的成员已经得到初始化,a的值为0
    Point p;
    foalt a = p.x; //编译不过,编译器认为p的字段未得到初始化,是未知的

    5、class支持继承,struct不支持继承,但支持接口。

    6、class偏向于“面向对象”,用户复杂,大型数据,而struct偏向于‘简单值’,比如小于16字节,结构简单

    7、class 的成员变量可以在声明的时候赋初始值,而在struct声明中,除非字段被声明为const或static,否则无法初始化。

    何时使用struct,何时使用class

    在多数情况下。推荐使用class,因为无论是类的赋值,作为参数类型传递,还是返回类的实例,实际copy的是托管堆上引用地址,也就大概4个字节,这非常有助于性能的提升。

    而作为struct类型,无论是赋值,作为参数类型传递,还是返回struct类型实例,是完全copy,会占用栈上的空间。

    根据Microsoft's value type recommendation,在如下情况下,推荐使用struct:

    1)小于16字节

    2)偏向于值,是简单数据,而不是偏向于‘面向对象’

    3)希望值不可变

  • 相关阅读:
    编译原理学习导论-作者四川大学唐良(转)初学者必看
    Ajax在chrome浏览器中测试调用失败解决办法
    sublime中输入法输入框只能在一个位置
    第三次作业
    第二次作业
    第一次作业
    2018年 大一下学期第零次作业
    14,15周作业
    第七周作业
    第六周作业
  • 原文地址:https://www.cnblogs.com/juneyss/p/12748356.html
Copyright © 2011-2022 走看看