IT培训网

关注我们

微信公众号 微信公众号 回复"大礼包"享福利 抖音 抖音 回复"大礼包"享福利
| |
您所在的位置:首页 > 北大青鸟热门技术 > C语言技术 > 关于C#中结构体(Struct)的几个问题-武汉北大青鸟技术文章

关于C#中结构体(Struct)的几个问题-武汉北大青鸟技术文章

发布:武汉宏鹏 来源:北大青鸟校区 2013-02-05 12:00 手机端入口

      关于C#中结构体(Struct)的几个问题-武汉北大青鸟技术文章

       既然有了类,为什么还要结构体?­

l        结构可视为轻量类,是创建用于存储少量成员数据的数据类型的理想选择,不能表示以后可能要通过继承进行扩展的类型­

l        struct类型适于表示Point、Rectangle和Color等轻量对象。尽管可以将一个点表示为类,但在某些情况下,使用结构更有效。例如,如果声明一个10000个Point对象组成的数组,为了引用每个对象,则需分配更多内存;这种情况下,使用结构可以节约资源。­

l        由于值类型不存在寻址的问题,性能更高­

为什么在设计编程语言时将结构设计成无继承性?­

    其实类的继承是有相当的成本的——由于继承性,每个类需要用额外的数据空间来存储“继承图”来表示类的传承历史,通俗地说来就是我们人类的家族家谱,里面存储着我们的祖宗十八代,只有这样我们才知道我们从哪里来的,而家谱肯定是需要额外的空间来存放的。大家不要觉得这个存放“继承图”的空间很小,但是如果我们的程序需要用10000个点(Point)来存放游戏中的人物形体数据的话,在一个场景中又有N个人,这个内存开销可不是小数目了。所以我们可以通过将点(Point)申明成Struct而不是class来节约内存空间。­

为什么结构不能自定义无参数的构造函数?­

结构类型的构造函数与类的构造函数类似,用来初始化结构的成员变量,但是struct不能包含显式默认构造函数,因为编译器将自动提供一个构造函数,此构造函数将结构中的每个字段初始化为默认值表中显示的默认值。然而,只有当结构用new实例化时,才会调用此默认构造函数。对值类型调用默认构造函数不是必需的。­

结构体与类相比有哪些特点?­

l        结构具有以下特点:­

l        结构是值类型,而类是引用类型。­

l        向方法传递结构时,结构是通过传值方式传递的,而不是作为引用传递的。­

l        与类不同,结构的实例化可以不使用new运算符。­

l        结构可以声明构造函数,但它们必须带参数。­

l        一个结构不能从另一个结构或类继承,而且不能作为一个类的基。所有结构都直接继承自System.ValueType,后者继承自System.Object。­

­武汉北大青鸟C语言技术

l        结构可以实现接口。­

l        在结构中初始化实例字段是错误的。­

l        如果定义结构类型带参数的构造函数,一定要完成结构所有字段的初始化,如果没有完成所有字段的初始化,编译时会发生错误­

如果,编译如下代码:­

   1:     2: struct Student    3: {    4:     public int Age;    5:     public string Name;    6:     public string Sex;    7:     public Student(int age, string name, string sex)    8:     {     9:         Age = age;   10:         Name = name;   11:     }   12: } 会产生如下错误:­

   在控制离开构造函数之前,字段“Student.Sex”必须完赋值。

这篇关于“关于C#中结构体(Struct)的几个问题-武汉北大青鸟技术文章” 已帮助146人,希望也能帮到你!

>>本文地址:http://www.xgaccp.com/html/3410.html

关于C#中结构体(Struct)的几个问题-武汉北大青鸟技术文章
声明:本站稿件版权均属北大青鸟所有,未经许可不得擅自转载。
相关文章推荐
扫码领PS/Office视频课

PS共28课时,Office共43课时

扫码领视频课

Hello~
    一键扫码申请

扫码领视频课 每人限领一份
领取之日起2年内有效