一、定义和使用非常相似:

1.定义和使用:

        public struct Student
        {
            string Name;
            int Age;
        }
        public class Student2
        {
            string Name;
            int Age;
        }
        Student student = new Student();
        Student2 student2 = new Student2();

2.都可以包含其他数据类型作为成员

3.都拥有成员,包括:构造函数(C#10)、方法、属性、字段、常量、枚举、事件以及事件处理函数。

4.两者的成员都有各自取值范围。比如一个成员为public一个为private

5.都可以实现接口

6.两者都可以公开一个默认属性

7.两者都可以声明和触发事件,而且两者都可以声明委托

二、主要区别:

1.结构体是值类型,类是引用类型。

2.所有结构成员默认都是public,类的变量和常量默认private

3.结构体成员不能被声明为protected

4.结构体变量声明不能指定初始值、使用new关键字初始化

5.结构体不能声明默认构造函数,也就是不能有参数不全的构造函数

6.结构体不能有析构函数

7.结构体无法被继承

8.结构体不会终止,CLR不会回收结构体

9.结构没有abstract和sealed,可以不用new初始化,类必须使用new初始化

三、如何选择:

1.堆栈空间有限,对于大量的逻辑对象,创建类比结构好一些。

2.结构表示如点、矩形颜色这样的轻量对象,例如:如果声明一个含有1000个点对象的数组,则将为引用每个对象分配附加的内存。在此情况下,结构的成本比较低。

3.在表现抽象和多级别的对象层次时,类是最好的选择

4.大多数情况下该类型只是一些数据时,结构是最佳选择