C# 结构体 struct关键字

2023-05-16

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

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

struct 语句为程序定义了一个带有多个成员的新的数据类型。
例:

using System;
using System.Text;
    
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,类型为 Books */
      Books Book2;        /* 声明 Book2,类型为 Books */

      /* 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();

   }
}

特点:

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

类和结构的区别:

  • 类是引用类型,结构是值类型。 结构不支持继承。
  • 结构不能声明默认的构造函数。
  • 结构体中声明的字段无法赋予初值,类可以。
  • 结构体的构造函数中,必须为结构体所有字段赋值,类的构造函数无此限制。

类与结构的选择:
首先明确,类的对象是存储在堆空间中,结构存储在栈中。堆空间大,但访问速度较慢,栈空间小,访问速度相对更快。故而,当我们描述一个轻量级对象的时候,结构可提高效率,成本更低。当然,这也得从需求出发,假如我们在传值的时候希望传递的是对象的引用地址而不是对象的拷贝,就应该使用类了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 结构体 struct关键字 的相关文章

  • Linux ln命令、软链接和硬链接的区别

    前些天发现了一个巨牛的人工智能学习网站 xff0c 通俗易懂 xff0c 风趣幽默 xff0c 忍不住分享一下给大家 点击跳转到教程 Linux ln命令是一个非常重要命令 xff0c 它的功能是为某一个文件在另外一个位置建立一个同步的链接
  • mysql 查找配置文件 my.ini 位置方法

    前些天发现了一个巨牛的人工智能学习网站 xff0c 通俗易懂 xff0c 风趣幽默 xff0c 忍不住分享一下给大家 点击跳转到教程 个人备注 xff1a 不显示文件类型时 xff0c my ini 文件名就叫作 my xff0c 文件属性
  • VS2019 + CUDA10.1 安装和配置

    VS2019 43 CUDA10 1 安装和配置 1 CUDA 10 1 安装 1 cuda官方下载网址 xff0c 找到cuda版本为cuda10 1 xff0c 选择自己系统对应的版本下载安装程序 2 运行cuda 10 1 243 4
  • pip使用清华镜像下载

    pip使用清华镜像下载 在国内使用pip安装python第三方包时 xff0c 可能会出现下载速度较慢的情况 xff0c 这时可以尝试从国内的pip镜像源下载这些包 xff0c 大大加快下载速度 xff1a 我们常用清华源 xff0c 在p
  • windows10安装Ubuntu20.04及界面图形化

    这里写自定义目录标题 windows10安装Ubuntu20 04及界面图形化一 安装前windows的配置二 ubuntu20 04系统安装三 ubuntu 20 04更换清华大学源四 中文汉化五 安装图形界面 xff0c VcXsrv的
  • opencv 获取rtsp原始码流代码

    opencv不仅可以获取解码后的图片数据 xff0c 还可以获取未经解码的原始码流数据 这样为使用其他硬解码器提供方便 在编译opencv cmake时需要指定 D WITH FFMPEG 61 ON python 代码如下 xff0c 需
  • 通过Launchpad查找PPA仓库

    我们通常会通过查找安装命令得知一些仓库名 xff0c 我们还可以通过Ubuntu Launchpad网站查询更多信息 首先登录https launchpad net 然后搜索自己关心的ppa xff0c 例如我们搜索得到了ppa jonat
  • ffmpeg 中 rtsp相关源码解析(五)

    lt lt ffmpeg 中 rtsp相关源码解析 四 gt gt 简单介绍了rtp包是通过ff rtsp fetch packet来获取的 我们更深入地问一个问题 xff0c 那么对于vp8 h264等音视频编解码标准 xff0c 这些p
  • 庆祝博客访问量即将突破20万

    2018年开始更新博客 xff0c 到现在已有3年 博客访问量预计这周就突破20万 本来写这博客并没有特别的目的 xff0c 只是想记录在工作学习过程中遇到的问题 也没想到会有这么多的访问 从南京到无锡再到上海 xff0c 一次次突破 从0
  • ffmpeg 源码分析 解码流程

    以ffmpeg 3 4 中的ffplay 来举例 全局初始化 av register all avformat network init AVFORMAT 设置过程 avformat alloc context avformat open
  • post传数组

    业务中涉及批量删除 xff0c 就需要传多个id xff0c 用数组吧 在post中 xff0c 参数都是键值对的形式 xff0c 键和值都是string类型 xff0c 那么就需要把数组序列化为string的形式 Array toStri
  • 基于OpenCV+QT的实时视频传输显示工具(一)

    时常会找一些比较有趣的东西来看 xff0c 但一般都是看完尝试了事 xff0c 没怎么做出总结过 现在想想真是可惜 xff0c 这么多年来 xff0c 看得东西也不少 xff0c 但是留下的印记却很少 xff0c 结果就是找工作时 xff0
  • Gstreamer基础知识介绍

    由于deepstream是基于gstreamer的 xff0c 所以要想在deepstream上做拓展 xff0c 需要对gstreamer有一定的认识 以下主要介绍Gstreamer整体框架和Gstreamer基础概念 一 Gstream
  • ffmpeg 图片转视频命令 互转

    图片转视频 ffmpeg f image2 i home test images image d jpg vcodec libx264 test h264 ffmpeg f image2 i home test images image d
  • git clone --recursive 用处

    git clone recursive 用于循环克隆git子项目 git clone recursive https github com onnx onnx tensorrt git
  • cuda lib64和stubs目录下存在同名so 引起cmake错误

    错误提示 CMake Warning at cmake FindCUDA cmake 1649 add library Cannot generate a safe runtime search path for target test b
  • 【折腾系列—All In One主机】1、 PVE虚拟机系统安装

    PVE虚拟机系统安装 写在前面1 什么是All In One主机 xff1f 2 什么是PVE虚拟机 3 PVE虚拟机的安装3 1 制作PE启动盘进行硬盘格式化3 2 PVE启动盘制作3 3 安装PVE虚拟机 写在前面 为什么要搭建All
  • 如何在IDEA中关闭vim模式

    菜单栏 tools gt vim emulator
  • 数据库技术基础

    数据库技术基础 基本概念 数据库技术是研究数据库的结构 存储 设计 管理和应用的一门软件学科 数据库 xff08 Database xff0c DB xff09 是统一管理的 长期存储在计算机内的 有组织的相关数据的集合 数据库系统 xff
  • windows10 ffmpeg使用clion采集音频(pcm数据)

    span class token comment span span class token comment Created by 克来 M on 2021 1 21 span span class token comment span s

随机推荐