如何选择结构还是类
一.类与结构的示例比较:
结构示例:
public struct Person

{
string Name;
int height;
int weight
public bool overWeight()
{
//implement something
}
}
类示例:
public class TestTime
{
int hours;
int minutes;
int seconds;

public void passtime()
{
//implementation of behavior
}
}
调用过程:
public class Test
{
public static ovid Main
{
Person Myperson=new Person //声明结构
TestTime Mytime=New TestTime //声明类
}
}
从上面的例子中我们可以看到,类的声明和结构的声明非常类似,只是限定符后面是 struct 还是 class 的区别,而且使用时,定义新的结构和定义新的类的方法也非常类似。那么类和结构的具体区别是什么呢?

二 .类与结构的差别
1. 值类型与引用类型
结构是值类型:值类型在堆栈上分配地址,所有的基类型都是结构类型,例如:int 对应System.int32 结构,string 对应 system.string 结构,通过使用结构可以创建更多的值类型
类是引用类型:引用类型在堆上分配地址

堆栈的执行效率要比堆的执行效率高,可是堆栈的资源有限,不适合处理大的逻辑复杂的对象。所以结构处理作为基类型对待的小对象,而类处理某个商业逻辑

因为结构是值类型所以结构之间的赋值可以创建新的结构,而类是引用类型,类之间的赋值只是复制引用
注:
1.虽然结构与类的类型不一样,可是他们的基类型都是对象(object),c#中所有类型的基类型都是object
2.虽然结构的初始化也使用了New 操作符可是结构对象依然分配在堆栈上而不是堆上,如果不使用“新建”(new),那么在初始化所有字段之前,字段将保持未赋值状态,且对象不可用
2.继承性
结构:不能从另外一个结构或者类继承,本身也不能被继承,虽然结构没有明确的用sealed声明,可是结构是隐式的sealed .
类:完全可扩展的,除非显示的声明sealed 否则类可以继承其他类和接口,自身也能被继承
注:虽然结构不能被继承可是结构能够继承接口,方法和类继承接口一样
例如:结构实现接口
interface IImage
{
void Paint();
}
struct Picture : IImage
{
public void Paint()
{
// painting code goes here
}
private int x, y, z; // other struct members
}
3.内部结构:
结构:
没有默认的构造函数,但是可以添加构造函数
没有析构函数
没有 abstract 和 sealed(因为不能继承)
不能有protected 修饰符
可以不使用new 初始化
在结构中初始化实例字段是错误的
类:
有默认的构造函数
有析构函数
可以使用 abstract 和 sealed
有protected 修饰符
必须使用new 初始化

三.如何选择结构还是类
讨论了结构与类的相同之处和差别之后,下面讨论如何选择使用结构还是类:
1.堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些
2. 结构表示如点、矩形和颜色这样的轻量对象,例如,如果声明一个含有 1000 个点对象的数组,则将为引用每个对象分配附加的内存。在此情况下,结构的成本较低。
3. 在表现抽象和多级别的对象层次时,类是最好的选择
4. 大多数情况下该类型只是一些数据时,结构时最佳的选择

转载于:https://www.cnblogs.com/sesexxoo/archive/2007/04/22/6189842.html

struct与class的区别相关推荐

  1. struct 与class 的区别?

    struct 与class 的区别? 1)在C++里struct 关键字与class 关键字一般可以通用,只有一个很小的区别.struct 的成员默认情况下属性是public 的,而class 成员却 ...

  2. C与C++中struct及C++中struct与class的区别

    C++中struct与class的区别 struct class 备注 成员函数 能 能 均有构造函数及析构函数 继承性 能 能 多态性 能 能 均有虚函数 默认成员属性 public private ...

  3. C++中Struct和Class的区别

    Struct和Class的区别 今天这篇博文主要讲解在C++中关键字struct和class的区别.这篇博文,将会系统的将这两个关键字的不同面进行详细的讲解. 从语法上来讲,class和struct做 ...

  4. C#中struct和class的区别详解

    本文详细分析了C#中struct和class的区别,对于C#初学者来说是有必要加以了解并掌握的. 简单来说,struct是值类型,创建一个struct类型的实例被分配在栈上.class是引用类型,创建 ...

  5. c#中struct和class的区别

    简单来说,struct是值类型,创建一个struct类型的实例被分配在栈上.class是引用类型,创建一个class类型实例被分配在托管堆上.但struct和class的区别远不止这么简单.本篇主要包 ...

  6. C# 中 Struct 与 Class 的区别,以及两者的适用场合

    C# 中 Struct 与 Class 的区别,以及两者的适用场合 先说区别,原文出处 http://www.dotnetspider.com/resources/740-Difference-bet ...

  7. 黑马程序员-Struct与Static的区别与联系?

    Struct与Static的区别与联系? 在C#的基础学习中,我对结构和方法总是容易混淆,一来二者长的太像,容易敲错:二来对它们的概念和用法理解不深,容易混淆.今天特此写篇博客来说明他们之间的区别与联 ...

  8. C++中结构体与类的区别(struct与class的区别)

    C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能. struct能包含成员函数吗? 能! struct能继承吗? 能!! s ...

  9. C#中Struct与Class的区别

    class和struct最本质的区别是class是引用类型,而struct是值类型,它们在内存中的分配情况有所区别. 什么是class? class(类)是面向对象编程的基本概念,是一种自定义数据结构 ...

最新文章

  1. 第十六届全国大学生智能车讯飞智慧餐厅智能车竞赛比赛成绩
  2. docker学习实践之路[第一站]环境安装
  3. python 自动克隆gitlab web前端
  4. 【2012百度之星/初赛上】D:轮子上的度度熊
  5. java读取resouces目录下文件
  6. openjdk 使用_如何在OpenJDK中使用ECC
  7. (48)Verilog HDL UART发送设计
  8. spring cloud搭建_Spring Cloud Eureka 注册中心集群搭建,Greenwich 最新版!
  9. excel导出 服务器运行失败,SolidWorks 插入自制EXCEL明细表 启动服务器应用程序失败:启动excle服务器失败...
  10. 前端花瓣飘落特效代码
  11. Stacked Hourglass Networks for Human Pose Estimation
  12. python裁剪图片边缘模糊_用cv2模糊部分图像后的锐利边缘
  13. docker-镜像加速
  14. Google Earth Engine(GEE)——GEE版本的全球森林火灾信息获取并呈现2001-2020年四川省火灾亮度时间序列分析
  15. 脑裂的产生与解决方案
  16. webpack 热加载原理探索
  17. 【附源码】计算机毕业设计java羽毛球场地管理系统设计与实现
  18. python中average什么意思_在Python3 numpy中mean和average的区别详解
  19. PLSQL 的中文乱码解决方法(简单实用)
  20. 大学php试题,《WEB程序设计(PHP)》-中国大学mooc-试题题目及答案

热门文章

  1. C++ 推断进程是否存在
  2. 关于Unity中Mesh网格的详解
  3. [WinForm]dataGridView导出到EXCEL
  4. SQL SERVER 2008的top增强
  5. Vc控件用法总结之List Control
  6. ORA-01113:文件n需要介质恢复 (转载)
  7. Kbengine游戏引擎-【4】demo-kbengine_unity3d_demo 在容器docker上安装测试
  8. Tesseract处理背景渐变的图片
  9. 【Java】JSON数据交换格式及其使用案例(聊天工具)
  10. Pandas入门教程(四)