类与结构的区别

c#类与结构体区别 本文对比了C#中结构体(struct)与类(class)的主要区别:1)定义关键字不同;2)结构体不允许字段初始化,类允许;3)结构体隐式构造函数无法重写且必须初始化所有字段,类可自定义无参构造函数;4)结构体对象可不使用new创建,但需手动初始化字段。通过代码示例详细说明了这些语法差异,帮助开发者正确使用这两种类型。 阅读详情
  一.类与结构的示例比较:

  结构示例:

  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. 大多数情况下该类型只是一些数据时,结构时最佳的选择
人工智能(AI)简史:推动新时代的科技力量 人工智能(AI,Artificial Intelligence)是计算机科学的一个分支,旨在研究和开发可以模拟、扩展或增强人类智能的系统。它涉及多种技术和方法,包括机器学习、深度学习、自然语言处理(NLP)、计算机视觉、专家系统等。 阅读详情

相关推荐

IPsec (主模式,野蛮模式)

IPsec vpn的主模式和野蛮模式

七汣的博客 3414

[C#]结构体和类的区别

结构体和类的区别: 在做一个项目时,使用了较多的结构体,并且存在一些结构体的嵌套,即某结构体成员集合包含另一个结构体等,总是出现一些奇怪的错误,才终于下决心好好分析一下到底类和结构体有啥不同,虽然它们很相似,但确实有很大的不同,用不好难免出的问题会比较多,现总结一下:一、结构体和类非常相似:1,定义和使用非常相似,例子如下:public struct Student{ string N...

weixin_30596165的博客 3218

CUDA编译踩坑实录:如何正确设置-gencode参数适配你的GPU算力

本文深入解析CUDA编译中-gencode参数的核心原理与实战配置,帮助开发者解决常见的'Unsupported gpu architecture'错误。通过厘清虚拟架构与真实架构的区别,并提供多版本兼容的CMake配置方案,确保编译出的代码能精准适配不同GPU算力,兼顾性能与广泛兼容性。

weixin_28829903的博客 338

类和结构的区别?

对于结构,构造函数的工作方式有一些区别,尤其是编译器总是提供一个无参数的默认构造函数。类:类默认会隐式生成一个无参构造函数,当手动定义构造函数时,隐式的无参构造函数就不存在了。5.2、在不适用new的情况下,需要将结构中的字段进行赋值后才可以调用结构中的方法。结构:必须要为结构体内的每个字段赋值。5.1、使用new可以直接调用。

SJ15630070060的博客 682

kubeadm init 运行时kebelet启动失败问题

解决k8s kubeadm init时遇到的kubelet问题

ZDPZN的博客 6074

Origin作图——等高线图

最近做一个测试数据图,开始想通过用热图来展示,结果发现热图有很多的小方块,很难呈现出最好的效果,因为数据是有一层一层的递进效果,因此经过尝试后,发现等高线图是个好选择。 热图展示效果如下:其中有很多的小方块不适合,热图制图方法前面有记录。 下面展示等高线图制作方法。首先是导入数据,可以从excal导入,也可以直接复制进去。等方法。 选中要展示的数据,绘图----等高线图 选中箭头,确定。 双击图像,点击线,我们需要把线隐藏了. 双击图像,我们需要调色板,根据自己的选择,一般用调色板的颜色。

qq_42278015的博客 1万+

结构和类的区别

结构和类非常相似,今天就来总结下结构和类有什么区别 1.首先就是语法上的区别,关键字的不同(class和struct) 类的语法: class Student { private string Name; private int Age; public void Introduce() { Consol...

beryljer的博客 1563

英飞凌IGBT驱动芯片2ED020I12F2去饱和电路设计总结整理收集

记录下英飞凌IGBT驱动芯片限流电阻阻值设计

nizhenyuchina的博客 5994

C#基础:类class与结构struct的区别

一般来说,某个类对象使用另一个类的对象赋值时,则两者共用一个内存地址【节约内存空间】,ReferenceEquals引用比较此时返回true类的构造函数(构造方法)如果一个类没有显示定义构造函数,则默认有一个无参构造函数,如果一个类已定义了带参数的构造函数,如果不手动定义无参构造函数,则没有无参构造函数。

ylq1045的专栏 1388

SFT看这一篇就够了!万字长文:监督微调(Supervised Fine-Tuning, SFT)技术全解析【从理论到实战】

大家好,我是大 F,深耕AI算法十余年,互联网大厂技术岗。分享AI算法干货、技术心得。欢迎关注,一起探索技术的无限可能!

大F子的智能小课 711

固定效应模型-以stata为工具

固定效应模型(Fixed Effects Model)是一种面板数据分析方法,通过引入个体固定效应来控制个体间的异质性,并更准确地估计解释变量对因变量的影响。它在许多经济、社会科学和健康研究中被广泛应用。

侯小啾技术博客 2837

你真的了解:类与结构吗?(细谈类与结构)

类与结构的概念? 类与结构的特点? 类与结构的声明? 类与结构的区别? 类与结构的使用场景?

凭时间赢来的东西,时间肯定会为之作证 12万+

VCAST创建单元测试工程

选择工作目录,后面创建胡UT工程将会生成到这个目录。

qq_42851449的博客 2481

C++中结构体与类的区别介绍

在参与以C++为编程基础的项目应用中总会遇到结构体类型与类的数据类型,但是其具体应用区别模糊不清 现将其区别总结如下,欢迎补充共同学习(先介绍C和C++中结构体的不同,再对比C++中结构体与类的区别) 一、C和C++中结构体的不同 (1)C语言中的结构体不能为空,否则会报错 C语言中要求一个结构或联合至少有一个成员。C语言中,空结构体的大小为0,而C++中空结构体(属于空类)的大小为1 ...

Gary_ghw的博客 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【C++】类与结构体的区别

我们知道C++中的 struct 对C中的 struct 进行了扩充,它不再是只能用来封装不同类型数据的数据结构了,而是拥有了更多的功能,例如:**可以包含成员函数,可以继承,可以实现多态!!**,这些功能与C++中的类很相似。 那么接下来我们解剖一下C++中结构体struct与类class的区别。 **struct更适合看成是一个数据结构的实现体,class更适合看成是一个对象的实现体!**

ly_6699的博客 3万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C#中结构体与类的区别

结构是一种关键字struct声明的自定义数据类型。与类相似,也可以包含构造函数,常数,字段,方法,属性,索引器,运算符和嵌套类型等。不过,结构是值类型,类是引用类型。   结构体和类的区别 1、值类型与引用类型 结构体是值类型:值类型在栈上分配地址,所有的基类型都是结构类型,例如:int 对应System.int32结构,通过使用结构可以创建更多的值类型。 类是引用类型:引用类型在堆上分...

5497

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

类与结构体的区别

结构体是值类型,类是引用类型 结构体成员不能从其他类或结构体继承,类可以(注意,所有的值类型都默认从ValueType类继承,ValueType类再从Object类继承。所以结构体对象仍然拥有超类Object的成员)。 结构体成员不能在声明时赋值初始值,类可以(实际上,C#类成员初始化代码会被编译器放到构造函数中的最前边部分执行,而C++中根本没有这种方式,只能声明成员) 不能为结构体提供无参构...

由纪的博客 1万+

结构与类的区别

传说中的结构与类 在高级语言编程里面我们都知道数据存储结构有多种,比如单个的简单数据类型int、string、char,或则是使用数组存储多个具有相同数据类型和语义的数据信息。但是在实际操作中我们操作的数据类型有很多,用以上两种很多难于解决,于是就引出了今天要讲的传说中的结构。说到结构我们脑海中是不是有一个“类”的概念在飘,没错结构和类十分的相似,结构和类一样可以包含数据和方法的定义,可以包含构

昨日书 420

C++中结构体与类的区别

金头盔飞行员蒋佳冀:知道了不行,熟悉也不够,要真正进入潜意识,成为条件反射才行。 C++中结构体与类的区别(结构不能被继承,默认是public,在堆栈中创建,是值类型,而类是引用类型)good ...

博雅勇士的博客 959

C#中类与结构体的区别、结构体与枚举的区别详解

​特性​类(Class)​​结构体(Struct)​​枚举(Enum)​​类型引用类型值类型值类型​内存分配堆栈栈​继承支持不支持不支持​适用场景复杂对象、需多态轻量数据、高性能需求有限状态、可读性优先选型原则优先用类实现业务逻辑主体。对小型数据(<16字节)且高频实例化的场景(如游戏开发),选择结构体。需明确语义的常量集合(如状态码),使用枚举替代魔数(Magic Number)

品质生活,极致编程。 651

结构体与类的区别

结构体与类都是各种数据类型的集合,区别是结构体里只能是各种变量类型的集合,而类除了各种变量类型外,还可以有各种函数 结构体举例: #include "stdio.h" #include "stdlib.h" struct Student{ char *name; int age; int score; }; void display(struct Student stu){ printf("%s,%d,%d", stu.name, stu.age, stu.score); } int main

qq_40032910的博客 573

C#中的结构体与类的区别

首先是语法定义上的区别啦,这个就不用多说了.定义类使用关键字class 定义结构使用关键字struct.在语法上其实类和结构有着很多相似的地方. 1、结构体中声明的字段无法赋予初值,类可以: 执行以上代码将出现“结构中不能实例属性或字段初始值设定”的报错,而类中无此限制,代码如下: 2、结构体的构造函数中,必须为结构体所有字段赋值,类的构造函数无此限制: 补充:类与结构的选择 首先明确,类的对象是存储在堆空间中,结构存储在栈中。堆空间大,但访问速度较慢,栈空间小,访问速度相对更快。故而,当我们描述一个轻

腻害 2489

C/C++中结构体与类的区别

C/C++中结构体的区别 c中的结构体只能自定义数据类型,结构体中不允许有函数; c++中结构体可以加入成员函数 C++中结构体与类的区别1.c++中的类和结构体唯一的区别就是默认的访问类型不同: 类:private 结构体:public 2. 类的关键字class可以作为template模板的关键字,即 template class A{};

Michael Jay 深度挖掘机 448

C# 结构体与类的区别

经常听到有朋友在讨论C#中的结构与类有什么区别.正好这几日闲来无事,自己总结一下,希望大家指点. 1. 首先是语法定义上的区别啦,这个就不用多说了.定义类使用关键字class 定义结构使用关键字struct.在语法上其实类和结构有着很多相似的地方.    定义类的语法     1 class Person 2 { 3 private string name; 4

阳尘子的博客 8398

C#中结构与类的区别

目录   类与结构的实例比较   类与结构的差别   如何选择结构还是类      一.类与结构的示例比较:   结构示例:   public struct Person   {   string Name;   int height;   int weight   public bool overWeight()   {   //implement something   }   }   类示例

NETZHOU的专栏 694

c#中结构与类的区别

c#中结构与类的区别目录   类与结构的实例比较   类与结构的差别   如何选择结构还是类 一.类与结构的示例比较:结构示例:public struct Person{   string Name;   int  height;   int  weightpublic bool overWeight(){    //implement

April的学习全纪录 939
上一篇: Access 导入到SQL 2005
下一篇: SQL Server中DataLength()与Len()的区别
kucool
博客等级 码龄21年 16粉丝 64原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值