初学者往往都会忽略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引用参数时,就是一个对结构的引用被传入方法,在方法内部做出的改变,可以影响到结构的值。