zoukankan      html  css  js  c++  java
  • dotNet学习之路 Struct与Class异同点

      初学者往往都会忽略C#中给我们提供的结构体,不知道结构体有什么作用,认为有“类”就足够了,本人刚开始也有这样的想法;今天,本人就Class和Struct的作用以及性能来谈谈结构体和类的异同之处。

      定义:

      结构是用户自定义的数据类型,与类很相似;它可以包含构造函数、字段、方法和属性。结构定义中使用的关键字是struct而不是class。

      亮代码,一个封装部门详细数据,包括部门名称和描述两个字段,很简单的一个代码段:

    /// <summary>
    /// 封装门类详细数据
    /// </summary>
    public struct DepartmentDetails
    {
        public string Name;
        public string Description;
    }

      作为一个对技术负责任的programer,以下均为个人观点,来讨论结构和类的不同点:

      (1)首先,在类型方面的不同;结构是一个值类型,而类是引用类型。在系统内部,结构继承于System.ValueType;

      (2)结构不能用于继承。一个结构不能继承自一个类或者是另一个结构;同样,一个类也不能继承自一个结构。但是结构和类都能实现接口,可以是多实现;

      (3)结构默认有一个无参的构造器,但是它不做任何事情。可以多次对默认构造器进行重载,但是不能添加一个无参的构造函数;而类中的默认构造函数却是对类中的字段进行初始化工作,他们同样可以被重载;在类中,可以添加一个非static的无参的构造函数,一旦你添加了无参的构造函数,该类中默认的非static无参构造函数就不起任何作用,编译器不会使用它对字段进行初始化工作;另外,在类中我们不能添加static的无参构造函数,类中的static构造函数只是初始化静态字段的,且只调用一次;

      (4)虽然结构非常强大,但是他们主要是作为数据的容器使用,而不是一个功能齐全的对象。因为他们是值类型,传递他们非常快,效率非常高。对于少于16字节的数据,用结构进行处理的效率要高于类。

      以上则为我对结构的认识,有错误或不当的地方欢迎大家提出来,我们共同学习。

      

      补充:

    感谢@magicDict的提醒,这里我做一点补充说明:

      当结构当作值参被传入到一个方法中时,其实就是一个实际参数的复制被创建。该复制被用在方法的执行中;

      如果结构当作out或ref引用参数时,就是一个对结构的引用被传入方法,在方法内部做出的改变,可以影响到结构的值。

  • 相关阅读:
    还在使用golang 的map 做Json编码么?
    Golang 性能测试(2) 性能分析
    golang 性能测试 (1) 基准性能测试
    消息队列 NSQ 源码学习笔记 (五)
    消息队列 NSQ 源码学习笔记 (四)
    消息队列 NSQ 源码学习笔记 (三)
    消息队列 NSQ 源码学习笔记 (二)
    消息队列 NSQ 源码学习笔记 (一)
    你不知道的空格
    Supervisor 使用和进阶4 (Event 的使用)
  • 原文地址:https://www.cnblogs.com/ARMdong/p/StructAndClass.html
Copyright © 2011-2022 走看看