***用于个人学习,侵权望告知
类是引用类型,结构是值类型;
类使用堆存储,结构使用栈存储;
结构隐式继承自ValueType类,而且不能派生于任何其他类型,类可以继承自除ValueType以外的任何类;
结构是无法被继承的,普通的类则可以(除密封类[l1] );
所有结构成员默认都是public,而类的变量和常量数则默认为private(其它类成员默认都是public);
结构成员不能被声明为protected,而类成员可以;
结构的成员变量在声明时不能指定初始值,而类的成员变量在声明时可以赋初始值;
结构不能声明默认的构造函数(也就是不拥有参数的非共享构造函数),也不允许声明析构函数,而类无此限制;
结构变量不需要使用new运算符进行实例化,而类的实例必须使用new进行实例化;
结构变量随所在的方法体运行结束时自动被终止,而类的实例则是由CLR的内存回收进程加以终止,当内存回收进程检测到没有任何作用的类的实例时,就会调用类的Finalize方法来销毁类的实例。所谓销毁就是从内存中消除并回收所占用的内存单元;
当结构变量用作方法参数时,结构是通过传值方式从实参传递给形参的,不是作为引用传递的,而类的实例用作方法参数时,是典型的引用传递。
[l1]为了避免滥用继承,提出了密封类的概念。密封类可以用来限制扩展性。如果密封了某个类,那么其他类不能从该类继承;如果密封了某个成员,则派生类不能重写该成员的实现。