【C#】类和对象的区别

1.区别概述

结构体和类的最大区别是在存储空间上,前者是值类型,后者是引用类型,它们在赋值上有很大的区别,在类中指向同一块空间的两个类的值会随一个类的改变而改变另一个,请看如下代码所示:

namespace test1
{
    //结构体A
    struct A
    {
        public int a;
        public A(int a=0)
        {
            this.a=a;
        }
    }
    //类B
    class B
    {
        public int b;
        public B(int b = 0)
        {
            this.b = b;
        }
    }
    internal class Program
    {
        static void Main(string[] args)
        {
            A a1 = new A(100);
            A a2 = a1;
            B b1=new B(100);
            B b2 = b1;
            Console.WriteLine("结构体A");
            Console.WriteLine("a1.a:{0}",a1.a);
            Console.WriteLine("a2.a:{0}", a2.a);
            Console.WriteLine("类B");
            Console.WriteLine("b1.b:{0}", b1.b);
            Console.WriteLine("b2.b:{0}", b2.b);
            a2.a = 200;
            b2.b = 200;
            Console.WriteLine("修改后");
            Console.WriteLine("结构体A");
            Console.WriteLine("a1.a:{0}", a1.a);
            Console.WriteLine("a2.a:{0}", a2.a);
            Console.WriteLine("类B");
            Console.WriteLine("b1.b:{0}", b1.b);
            Console.WriteLine("b2.b:{0}", b2.b);
        }
    }
}

运行结构如上图,我们发现修改结构体a2不会改变a1的内容,而修改类b2则会让b1的内容跟着修改,这是因为类是存在堆上的,将b2=b1时,这两个类对象同时指向堆上的同一块空间,这时改变任何一方都会引起另一方的改变。

此外,结构体和类在使用上很类似,结构体甚至可以用面向对象的思想来形容一类对象。

结构体具备着面向对象思想中封装的特性,但是它不具备继承和多态的特性,因此大大减少了它的使用频率。

结构体不具备继承特性,因此不能使用protected保护访问修饰符

2.细节区别

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

2.结构体存在栈中,类存在堆中
3.结构体成员不能使用protected访问修饰符,而类可以

4.结构体成员变量申明不能指定初始值,而类可以
5.结构体不能申明无参的构造函数,而类可以
6.结构体申明有参构造函数后,无参构造不会被顶掉

7.结构体不能申明析构函数,而类可以
8.结构体不能被继承,而类可以
9.结构体需要在构造函数中初始化所有成员变量,而类随意
10.结构体不能被静态static修饰(不存在静态结构体),而类可以

11.结构体不能在自己内部申明和自已一样的结构体变量,而类可以
 

3.结构体的特别之处

结构体可以继承接口,接口是行为的抽象

4.如何选择结构体和类

1.想要用继承和多态时,直接淘汰结构体,比如玩家、怪物等等

2.对象时数据集合时,优先考虑结构体,比如位置、坐标等等
3.从值类型和引用类型赋值时的区别上去考虑,比如经常被赋值传递的对象,并且改变赋值对象,原对象不想跟着变化时,就用结构体。比如坐标、向量.旋转等等
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/663988.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构:排序(1)【冒泡排序】【插入排序】【堆排序】【希尔排序】

一.冒泡排序 冒泡排序实际上就是这样: 1.冒泡排序的实现 两个数进行比较,大的往后移动。对于排序这个专题来说,这是比较简单的一种排序了: void Swap(int* a, int* b) {int tmp *a;*a *b;*b tmp; } void BubbleSort1(int* …

Amazon云计算AWS(二)

目录 三、简单存储服务S3(一)S3的基本概念和操作(二)S3的数据一致性模型(三)S3的安全措施 四、非关系型数据库服务SimpleDB和DynamoDB(一)非关系型数据库与传统关系数据库的比较&…

Elasticsearch 认证模拟题 -2

一、题目 有一个索引 task3,其中有 fielda,fieldb,fieldc,fielde 现要求对 task3 重建索引,重建后的索引新增一个字段 fieldg 其值是fielda,fieldb,fieldc,fielde 的值拼接而成。 …

基于JSP的高校二手交易平台

开发语言:Java 数据库:MySQL 技术:JSP技术 工具:浏览器(如360浏览器、谷歌浏览器、QQ浏览器等)、MySQL数据库 系统展示 系统功能界面 用户注册与登录界面 个人中心界面 商品信息界面 摘要 本文研究了高…

Go 优雅的爬虫框架 - Colly

Colly 是一款用 Go 语言编写的优雅网络爬虫框架,速度快、灵活且易于使用 关键特性包括: 线程安全。用户友好的 API。支持 XHR(Ajax)和 WebSocket。缓存和持久化。支持速度限制和分布式爬取。强大的可扩展性。colly采集器配置 AllowedDomains: 设置收集器使用的域白名单,设…

TrueNAS开启SSH登录ROOT

简介: 从 SCALE Bluefin 22.12.0 开始,为了加强安全性并遵守联邦信息处理标准 (FIPS),root帐户登录已被弃用。所有 TrueNAS 用户都应创建具有所有必需权限的本地管理员帐户,并开始使用它来访问 TrueNAS。当根用户密码被禁用时,只有管理用户帐户才能登录 TrueNAS Web 界面。…

深入剖析 Kubernetes 原生 Sidecar 容器

1 Sidecar 容器的概念 sidecar 容器的概念在 Kubernetes 早期就已经存在。一个明显的例子就是 2015 年的这篇 Kubernetes 博客文章,其中提到了 sidecar 模式。多年来,sidecar 模式在应用程序中变得越来越普遍,使用场景也变得更加多样化。 其…

大语言模型拆解——Tokenizer

1. 认识Tokenizer 1.1 为什么要有tokenizer? 计算机是无法理解人类语言的,它只会进行0和1的二进制计算。但是呢,大语言模型就是通过二进制计算,让你感觉计算机理解了人类语言。 举个例子:单1,双2&#x…

【银河麒麟V10服务器OS-系统根分区扩容】指导教程手册

【银河麒麟V10服务器OS-系统根分区扩容】指导教程手册 环境信息:VMware虚拟软件16.0 首先查看KylinOS服务器版本:nkvers 备注: (Tercel) 版本是 V10 SP1 版本, (Sword) 版本是 V10 SP2 版本, (Lance) 版本是 V10 …

Apache SeaTunnel On SparkEngine 集成CDP

随着数据处理需求的日益增长,选择一个高效、灵活的数据处理工具变得尤为关键。SeaTunnel,作为一个开源的数据集成工具,不仅支持多种数据处理引擎,还提供了丰富的连接器和灵活的数据同步方案。 本文将详细介绍 SeaTunnel 的优势和…

笔记:Windows故障转移集群下的oracle打补丁

以下方法比较暴力,请谨慎使用 1,关闭并禁用故障转移集群的服务,如下 2,关闭故障转移集群中资源的自启动 3,重启服务器 4,手动关闭服务 net stop msdtc net stop winmgmt 5,分别对所有节点打…

公路资产三维实景快速建模技术方案

目录 1. 应用背景点云矢量建模特征提取1. 路面标识线自动提取2. 交通标志牌自动提取3.护栏、路缘石自动提取4.路面矢量高程自动纠正 属性及编码计算1.里程桩号自动计算2.单体化要素自动编码 公路三维实景模型自动化建模 1. 应用背景 随着“数字交通强国”建设的不断深入&#x…

「多客」圈子论坛社区交友系统开源版小程序源码|圈子社区系统

简述 社交圈子论坛系统是一种面向特定人群或特定话题的社交网络,它提供了用户之间交流、分享、讨论的平台。在这个系统中,用户可以创建、加入不同的圈子,圈子可以是基于兴趣、地域、职业等不同主题的。用户可以在圈子中发帖、评论、点赞等互…

表格中附件的上传及显示#Vue3#后端接口数据

表格中附件的上传及显示#Vue3#后端接口数据 实现效果&#xff1a; 表格中上传附件 代码&#xff1a; <!-- 文件的上传及显示 --> <template><!-- 演示地址 --><div class"dem-add"><!-- Search start --><div class"dem-ti…

利用audacity和ffmpeg制作测试音频文件

最近要用SIPP测试一个场景&#xff0c;需要发送双声道/16K采样率/16bit量化的PCM流&#xff0c;但是下载的素材往往不能满足参数要求。那么就自己制作。 首先下载mp3文件&#xff0c;并用audacity打开。 接下来&#xff0c;点击菜单栏中轨道-重采样&#xff0c;将采样频率设为1…

【机器学习】Samba-CoE实现高效推理部署

Samba-CoE&#xff1a;突破AI内存墙&#xff0c;实现高效推理部署 一、引言二、Samba-CoE系统概述三、突破AI内存墙的关键技术流数据流三层内存系统 四、Samba-CoE的推理部署与优化动态模型切换资源优化分配性能加速 五、代码实例与实现细节六、结语 一、引言 随着人工智能技术…

AI视频下载:ChatGPT数据科学与机器学习课程

ChatGPT是一个基于OpenAI开发的GPT-3.5架构的AI对话代理。作为一种语言模型,ChatGPT能够理解并对各种主题生成类似人类的响应,使其成为聊天机器人开发、客户服务和内容创作的多用途工具。 此外,ChatGPT被设计为高度可扩展和可定制的,允许开发人员对其响应进行微调并将其集成到…

在“AI PC”中使用NPU运行 Phi-3-mini

欢迎关注我的公众号“ONE生产力”&#xff0c;获取更多AI、云计算资讯分享&#xff01; 前段时间&#xff0c;我做了一系列微软Phi-3-mini小语言模型的教程&#xff0c;很多朋友参考教程进行了实践&#xff0c;其中有一个朋友反馈说模型token推理很慢&#xff0c;没有答道我说…

【论文精读】SAM

摘要 本文提出Segment Anything&#xff08;SA&#xff09;&#xff0c;一个可prompt的视觉分割模型&#xff0c;通过一个 能实现视觉特征强大泛化的任务在包含大量图像的数据集上对模型进行预 训练&#xff0c;旨在通过使用prompt工程解决新数据 分布上的一系列下游分割问题。…

FPGA新起点V1开发板(七-语法篇)——程序框架+高级语法(选择性做笔记)

文章目录 一、模块结构二、赋值三、条件语句 一、模块结构 默认是wire类型&#xff0c;assign是定义功能。 上面这两个always都是并行 例化 二、赋值 有两种赋值“”和“<” “”是阻塞赋值&#xff0c;也就是从上到下&#xff0c;依次完成 “”是非阻塞赋值&#xff0c;…