C#_结构(Struct)详解

embedded/2024/9/22 22:50:29/

在 C# 中,结构是值类型数据结构。它使得一个单一变量可以存储各种数据类型的相关数据。struct 关键字用于创建结构。

结构是用来代表一个记录。假设您想跟踪图书馆中书的动态。您可能想跟踪每本书的以下属性:

  • Title
  • Author
  • Subject
  • Book ID

定义结构

为了定义一个结构,您必须使用 struct 语句。struct 语句为程序定义了一个带有多个成员的新的数据类型。

例如,您可以按照如下的方式声明 Book 结构:

struct Books{public string title;public string author;public string subject;public int book_id;
};  

下面的程序演示了结构的用法:

using System;struct Books{public string title;public string author;public string subject;public int book_id;
};  public class testStructure{public static void Main(string[] args){Books Book1;        /* 声明 Book1,类型为 Book */Books Book2;        /* 声明 Book2,类型为 Book *//* book 1 详述 */Book1.title = "C Programming";Book1.author = "Nuha Ali"; Book1.subject = "C Programming Tutorial";Book1.book_id = 6495407;/* book 2 详述 */Book2.title = "Telecom Billing";Book2.author = "Zara Ali";Book2.subject =  "Telecom Billing Tutorial";Book2.book_id = 6495700;/* 打印 Book1 信息 */Console.WriteLine( "Book 1 title : {0}", Book1.title);Console.WriteLine("Book 1 author : {0}", Book1.author);Console.WriteLine("Book 1 subject : {0}", Book1.subject);Console.WriteLine("Book 1 book_id :{0}", Book1.book_id);/* 打印 Book2 信息 */Console.WriteLine("Book 2 title : {0}", Book2.title);Console.WriteLine("Book 2 author : {0}", Book2.author);Console.WriteLine("Book 2 subject : {0}", Book2.subject);Console.WriteLine("Book 2 book_id : {0}", Book2.book_id);       Console.ReadKey();}
}

当上面的代码被编译和执行时,它会产生下列结果

Book 1 title : C Programming
Book 1 author : Nuha Ali
Book 1 subject : C Programming Tutorial
Book 1 book_id : 6495407
Book 2 title : Telecom Billing
Book 2 author : Zara Ali
Book 2 subject : Telecom Billing Tutorial
Book 2 book_id : 6495700

C# 结构的特点

您已经用了一个简单的名为 Books 的结构。在 C# 中的结构与传统的 C 或 C++ 中的结构不同。C# 中的结构有以下特点:

  • 结构可带有方法、字段、索引、属性、运算符方法和事件。
  • 结构可定义构造函数,但不能定义析构函数。但是,您不能为结构定义默认的构造函数。默认的构造函数是自动定义的,且不能被改变。
  • 与类不同,结构不能继承其他的结构或类。
  • 结构不能作为其他结构或类的基础结构。
  • 结构可实现一个或多个接口。
  • 结构成员不能指定为 abstract、virtual 或 protected。
  • 当您使用 New 操作符创建一个结构对象时,会调用适当的构造函数来创建结构。与类不同,结构可以不使用 New 操作符即可被实例化。
  • 如果不使用 New 操作符,只有在所有的字段都被初始化之后,字段才被赋值,对象才被使用。

类 vs 结构

类和结构有以下几个基本的不同点:

  • 类是引用类型,结构是值类型。
  • 结构不支持继承。
  • 结构不能声明默认的构造函数。

针对上述讨论,让我们重写前面的实例:

using System;struct Books{private string title;private string author;private string subject;private int book_id;public void getValues(string t, string a, string s, int id){title = t;author = a;subject = s;book_id = id;}public void display(){Console.WriteLine("Title : {0}", title);Console.WriteLine("Author : {0}", author);Console.WriteLine("Subject : {0}", subject);Console.WriteLine("Book_id :{0}", book_id);}
};  public class testStructure{public static void Main(string[] args){Books Book1 = new Books(); /* 声明 Book1,类型为 Book */Books Book2 = new Books(); /* 声明 Book2,类型为 Book *//* book 1 详述 */Book1.getValues("C Programming","Nuha Ali", "C Programming Tutorial",6495407);/* book 2 详述 */Book2.getValues("Telecom Billing","Zara Ali", "Telecom Billing Tutorial", 6495700);/* 打印 Book1 信息 */Book1.display();/* 打印 Book2 信息 */Book2.display(); Console.ReadKey();}
}

当上面的代码被编译和执行时,它会产生下列结果:

Title : C Programming
Author : Nuha Ali
Subject : C Programming Tutorial
Book_id : 6495407
Title : Telecom Billing
Author : Zara Ali
Subject : Telecom Billing Tutorial
Book_id : 6495700


http://www.ppmy.cn/embedded/115276.html

相关文章

用nginx-rtmp-win32-master及ffmpeg模拟rtmp视频流

效果 使用nginx-rtmp-win32-master搭建RTMP服务 双击exe就可以了。切记整个目录不能有中文 README.md ,启用后本地的RTM路径: rtmp://192.168.1.186/live/xxx ffmpeg将地本地视频推RMTP F:\rtsp\ffmpeg-7.0.2-essentials_build\bin>ffmpeg -re -i F:\rtsp\123.mp4 -c c…

docker部署Stirling-PDF

github网址: GitHub - Stirling-Tools/Stirling-PDF: #1 Locally hosted web application that allows you to perform various operations on PDF files 1、官方docker镜像无法拉取,使用别人阿里云私人镜像仓库下载Stirling-PDF镜像: regi…

react:组件通信

组件通信 父组件向子组件通信 function App() {return (<div><div>这是父组件</div><Child name"这是子组件" /></div>); }// 子组件 function Child(props) {return <div>{props.name}</div>; }props说明 props可以传…

flutter GetX 管理和处理依赖的生命周期与状态的方法列表

在 GetX 中&#xff0c;除了 Get.put() 和 Get.find() 这两个常用的依赖注入方法之外&#xff0c;还有其他的一些方法可以帮助我们管理和处理依赖的生命周期与状态。以下是一些常用的依赖管理方法以及它们的作用&#xff1a; 1. Get.lazyPut() 作用: Get.lazyPut() 是延迟注入…

Android 15 正式发布至 AOSP

Google官方宣布&#xff0c;将于近期发布了 Android 15&#xff0c;而在早些时候&#xff0c;Google已经将其源代码推送至 Android 开源项目 (AOSP)。未来几周内&#xff0c;Android 15 将在受支持的 Pixel 设备上正式推出&#xff0c;并将于今年晚些时候在三星、Honor、iQOO、…

每日学习一个数据结构-B+树

文章目录 什么是B树示意图B树的基本特点B树的优点B树的应用场 B树分裂和合并的机制节点分裂节点合并注意事项 什么是B树 B树是一种自平衡的树数据结构&#xff0c;广泛应用于数据库和操作系统的索引结构中&#xff0c;特别是在MySQL的InnoDB存储引擎中。它通过保持数据排序&am…

大数据-138 - ClickHouse 集群 表引擎详解3 - MergeTree 存储结构 数据标记 分区 索引 标记 压缩协同

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

Scikit-learn (`sklearn`) 教程

Scikit-learn (sklearn) 教程 Scikit-learn 是 Python 中最流行的机器学习库之一&#xff0c;提供了丰富的机器学习算法、数据预处理工具以及模型评估方法&#xff0c;广泛应用于分类、回归、聚类和降维等任务。 在本教程中&#xff0c;我们将介绍如何使用 Scikit-learn 进行…