C# 结构体和类

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、类(Class)
  • 二、结构体(Struct)
  • 示例代码(定义类和结构体)
  • 类的继承
    • 代码示例(类的继承)
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

写单片机习惯了结构体的方式定义数据;导致现在写C# 忽略了类的方式定义


一、类(Class)

  1. 引用类型:类是引用类型,当一个类的实例被创建时,变量指向堆上的对象
  2. 继承:类支持继承,可以派生自另一个类,并且可以实现多个接口。
  3. 构造函数:类可以有无参或有参构造函数,默认情况下会有一个无参构造函数。
  4. 成员访问修饰符:类可以包含私有、受保护、公共等不同访问级别的成员。
  5. 垃圾回收:由于类是引用类型,所以不再使用的类实例将由CLR的垃圾收集器自动清理。

二、结构体(Struct)

  1. 值类型:结构体是值类型,意味着它们直接存储数据,而不是引用数据的位置。因此,当一个结构体实例被赋值给另一个变量时,实际上是复制了整个结构体的数据。
  2. 不支持继承:结构体不能从其他类或结构体继承,也不能作为其他类型的基类型。但是,结构体可以实现接口。
  3. 构造函数:结构体可以拥有有参构造函数,但默认情况下不会提供无参构造函数。如果定义了任何构造函数,则必须显式地定义无参构造函数。
  4. 成员访问修饰符:结构体也可以包含私有、公共等不同访问级别的成员,但是默认字段和事件是私有的。
  5. 性能:因为结构体是值类型,所以在某些场景下(如频繁创建和销毁的小型数据结构),使用结构体可能比使用类更高效。

示例代码(定义类和结构体)

代码如下(示例):

// 定义一个类
public class Person
{public string Name { get; set; }public int Age { get; set; }// 构造函数public Person(string name, int age){Name = name;Age = age;}// 方法public void Introduce(){Console.WriteLine($"Hello, my name is {Name} and I'm {Age} years old.");}
}// 定义一个结构体
public struct Point
{public int X { get; set; }public int Y { get; set; }// 构造函数public Point(int x, int y){X = x;Y = y;}// 方法public void PrintPoint(){Console.WriteLine($"Point: ({X}, {Y})");}
}class Program
{static void Main(string[] args){// 使用类Person person1 = new Person("Alice", 30);Person person2 = person1;person2.Age = 35;person1.Introduce(); // 输出 "Hello, my name is Alice and I'm 35 years old."// 使用结构体Point point1 = new Point(1, 2);Point point2 = point1;point2.Y = 10;point1.PrintPoint(); // 输出 "Point: (1, 2)"point2.PrintPoint(); // 输出 "Point: (1, 10)"}
}

类的继承

C#中的类的继承是指一个类(派生类)从另一个类(基类)中继承属性和方法。这允许代码的重用和扩展,使派生类可以继承基类的特性,并在其基础上添加或覆盖特定的行为。

代码示例(类的继承)

// 基类
public class Animal
{public string Name { get; set; }public void Speak(){Console.WriteLine("Animal speaks");}
}// 派生类
public class Dog : Animal
{public string Breed { get; set; }public new void Speak(){Console.WriteLine("Dog barks");}
}// 另一个派生类
public class Cat : Animal
{public string Color { get; set; }public void Meow(){Console.WriteLine("Cat meows");}
}// 程序入口
class Program
{static void Main(string[] args){// 创建一个Dog对象Dog myDog = new Dog();myDog.Name = "Fido";myDog.Breed = "Golden Retriever";// 调用基类的Speak方法myDog.Speak(); // 输出: Dog barks// 创建一个Cat对象Cat myCat = new Cat();myCat.Name = "Kitty";myCat.Color = "White";// 调用基类的Speak方法myCat.Speak(); // 输出: Animal speaks// 调用派生类的Meow方法myCat.Meow(); // 输出: Cat meows}
}

总结

结构体对内存友好,用完及时释放,但是对面向对象编程不友好,当大量数据时操作繁琐复杂(不是老手不建议使用);类的方式适合面向对象编程,特别是处理大量数据的时候更能体现其价值;

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

github配置pages并配置自定义域名

有cloudflare的话实现的效果更好,可以使用自己的域名,实现白嫖一个网站服务器 1、配置git(可选步骤) git init git config --global user.name "sijia" git config --global user.email "devopsgame.vip"g…

vue3 结合 echarts 为tooltip绑定点击事件实现树形结构下动态添加子节点的效果

先看效果 具体实现代码如下&#xff1a; <template> <div ref"ecs" id"ecs" style"width: 800px;height:800px; background-color:white;"></div> </template><script setup> import {onMounted, ref} from &quo…

【JavaWeb后端学习笔记】Redis常用命令以及Java客户端操作Redis

redis 1、redis安装与启动服务2、redis数据类型3、redis常用命令3.1 字符串String3.2 哈希Hash3.3 列表List3.4 集合Set&#xff08;无序&#xff09;3.5 有序集合zset3.6 通用命令 4、使用Java操作Redis4.1 环境准备4.2 Java操作字符串String4.3 Java操作哈希Hash4.4 Java操作…

js:我要在template中v-for循环遍历这个centrerTopdata,我希望自循环前面三个就可以了怎么写

问&#xff1a; 我按在要在template中v-for循环遍历这个centrerTopdata&#xff0c;我希望自循环前面三个就可以了怎么写&#xff1f; 回答&#xff1a; 问&#xff1a; <div v-for"(item, index) in centrerTopdata.slice(0, 3)" :key"index"> d…

前端成长之路:CSS(1)

在前端三件套中&#xff0c;CSS的主要是用于美化网页、进行页面布局的。 HTML的局限性 HTML是一个非常单纯的语言&#xff0c;它只关心内容的语义&#xff1a; 比如看见h1标签&#xff0c;就表明这是一个大标题、看见p标签&#xff0c;就表明这是一个段落、看见img标签&#…

微服务SpringCloud链路追踪之Micrometer+Zipkin

视频教程&#xff1a; https://www.bilibili.com/video/BV12LBFYjEvR 效果演示 当我们发送一个请求给 Gateway 的时候&#xff0c;由 Micrometer trace 进行链路追踪和数据收集&#xff0c;由 Zipkin 进行数据展示。可以清楚的看到微服务的调用过程&#xff0c;以及每个微服务…

0001.基于springmvc简易酒店管理系统后台

一.系统架构 springmvcjsplayuimysql 二.功能特性 简单易学习&#xff0c;虽然版本比较老但是部署方便&#xff0c;tomcat环境即可启用&#xff1b;代码简洁&#xff0c;前后端代码提供可统一学习&#xff1b;祝愿您能成尽快为一位合格的程序员&#xff0c;愿世界没有BUG; …

Elasticsearch Kibana (windows版本) 安装和启动

目录 1.安装 2.启动 elasticsearch 3.启动 kibana 1.安装 elasticsearch下载&#xff0c;官网链接&#xff1a; Download Elasticsearch | Elastichttps://www.elastic.co/downloads/elasticsearch kibana下载&#xff0c;官网链接&#xff1a; Download Kibana Free | G…

回归预测 | MATLAB实现CNN-BiGRU卷积神经网络结合双向门控循环单元多输入单输出回归预测

回归预测 | MATLAB实现CNN-BiGRU卷积神经网络结合双向门控循环单元多输入单输出回归预测 目录 回归预测 | MATLAB实现CNN-BiGRU卷积神经网络结合双向门控循环单元多输入单输出回归预测预测效果基本介绍程序设计参考资料预测效果 基本介绍 CNN-BiGRU,即卷积神经网络(CNN)与双…

在C#中编程绘制和移动线段

这个示例允许用户绘制和移动线段。它允许您根据鼠标下方的内容执行三种不同的操作。 当鼠标位于某个线段上时&#xff0c;光标会变成手的形状。然后您可以单击并拖动来移动该线段。当鼠标位于线段的终点上时&#xff0c;光标会变成箭头。然后您可以单击并拖动以移动终点。当鼠…

Jenkins容器使用宿主机Docker(五)

DevOps之安装和配置 Jenkins (一) DevOps 之 CI/CD入门操作 (二) Sonar Qube介绍和安装&#xff08;三&#xff09; Harbor镜像仓库介绍&安装 &#xff08;四&#xff09; Jenkins容器使用宿主机Docker&#xff08;五&#xff09; Jenkins流水线初体验&#xff08;六&#…

网站被间歇性扫描,IP不断更换,我的应对方法

文章目录 背景应对方式封ip自动不响应策略代码为啥不上其他防护软件呢&#xff1f; 背景 我负责的一个网站&#xff0c;不出名&#xff0c;平时也没多少流量。1天有几百个就不错了。没想到&#xff0c;这么不起眼的网站也有被人盯上的时候。 一天&#xff0c;后台使用人员告诉…

WHY - 为什么选择 Rsbuild

目录 一、介绍二、工具对比三、性能 https://rsbuild.dev/zh/guide/start/index 一、介绍 Rsbuild 是由 Rspack 驱动的高性能构建工具&#xff0c;它默认包含了一套精心设计的构建配置&#xff0c;提供开箱即用的开发体验&#xff0c;并能够充分发挥出 Rspack 的性能优势。 二…

停车场系统|Java|SSM|JSP|

【技术栈】 1⃣️&#xff1a;架构: B/S、MVC 2⃣️&#xff1a;系统环境&#xff1a;Windowsh/Mac 3⃣️&#xff1a;开发环境&#xff1a;IDEA、JDK1.8、Maven、Mysql5.7 4⃣️&#xff1a;技术栈&#xff1a;Java、Mysql、SSM、Mybatis-Plus、JSP、jquery,html 5⃣️数据库可…

hive—常用的日期函数

目录 1、current_date 当前日期 2、now() 或 current_timestamp() 当前时间 3、datediff(endDate, startDate) 计算日期相差天数 4、months_between(endDate, startDate) 日期相差月数 5、date_add(startDate, numDays) 日期加N天 6、date_sub(startDate, numDays) 日期减…

12.11函数 结构体 多文件编译

1.脑图 定义一个数组&#xff0c;用来存放从终端输入的5个学生的信息【学生的信息包含学生的姓名、年纪、性别、成绩】 1>封装函数 录入5个学生信息 2>封装函数 显示学生信息 3>封装函数 删除第几个学生信息&#xff0c;删除后调用显示学生信息函数 显示 4> 封…

从 Router 到 Navigation:HarmonyOS 路由框架的全面升级与迁移指南

在本教程中&#xff0c;我们深入探讨了 Router 和 Navigation 在 HarmonyOS 中的用法差异及如何从 Router 切换到 Navigation 的方法。重点涵盖了页面跳转、转场动画、生命周期管理以及跨包路由的实现。 页面结构对比 Router 页面结构 每个页面需要使用 Entry 注解。 页面需要…

【工具】linux matlab 的使用

问题1 - 复制图表 在使用linux matlab画图后&#xff0c;无法保存figure。 例如在windows下 但是在linux下并没有这个“Copy Figure”的选项。 这是因为 “ The Copy Figure option is not available on Linux systems. Use the programmatic alternative.” 解决方案&…

windows11 专业版 docker desktop 安装指南

家庭中文版需升级专业版&#xff0c;家庭版没有hyper-v。 开始运行optionalfeatures.exe打开windows功能 安装wsl2 步骤 1 - 启用适用于 Linux 的 Windows 子系统步骤 2 - 检查运行 WSL 2 的要求步骤 3 - 启用虚拟机功能步骤 4 - 下载 Linux 内核更新包 步骤 1 - 启用适用于 L…

工业大数据分析算法实战-day01

文章目录 前言day01工业上刻画物理世界模型忽略业务的数据挖掘是本末倒置数据分析算法的朴素思想 前言 从毕业后从事的行业是机房动力环境运维行业&#xff0c;职责为动环设备的监控预警和故障诊断&#xff0c;核心主旨为动环设备的数智化&#xff0c;个人浅见从大类视角来看隶…