C# 结构体的使用

2023-11-06

先说一下结构体和类的区别:

1,结构体定义的是变量,保存在栈当中。类的对象(实例)保存在堆当中,引用保存在栈当中。结构体是值类型,类是引用类型。

2,不能在结构体中定义默认的构造方法(无参);类中可以定义。

3,结构体中自定义构造方法后,编译器会提供默认的构造方法,但是类就不会提供了。

4,在结构体中的非默认构造方法中必须对结构体所有的字段进行初始化,否则会报错

5,在类中声明字段的同时,可以初始化字段的值,但在结构体中不可以。


C#结构体,里面的成员默认为privite,而C和C++默认都是public的。

C#结构体,有一个默认的无参空构造函数,在声明了有参构造函数后,可以继续使用无参构造函数

struct Date
    {
        public int year, month, day;
        public Date(int y, int m, int d)
        {
            year = y;
            month = m;
            day = d;
        }
    };


Date d1;
d1 = new Date();
Console.WriteLine(d1.year);

d1 = new Date(2000,10,12);
Console.WriteLine(d1.year);


可以不用new来生成,因为struct定义的是变量不是对象,但是class类必须用new,不然不能使用。

Date d1;
d1.day = 3;
d1.month = 5;
d1.year = 1900;
Console.WriteLine(d1.year);

因为struct定义的是变量,不是对象,所以改变d1的值不会引起d2的改变,用d1给d2赋值时,必须确保d1的所有成员已经赋了初值,不然会报错。

    Date d1;
            d1.year = 1900;
            d1.month = 1;
            d1.day = 1;
            Date d2 =d1;

            Console.WriteLine(d1.year);
            Console.WriteLine(d2.year);

            d1.year = 2000;
            d1.month = 12;
            d1.day = 12;
            Console.WriteLine(d1.year);
            Console.WriteLine(d2.year);

如果是显示调用构造函数进行初始化,这样所有的成员已经被初始化完毕(默认空构造也是),可以直接给d2赋值。大家可以自己尝试着写一下。

同样,赋值后改变d1,不会对d2造成影响。

  Date d1 = new Date();
            Console.WriteLine(d1.year);

            Date d2 = d1;
            Console.WriteLine(d2.year);

            d1.year = 2100;
            Console.WriteLine(d1.year);
            Console.WriteLine(d2.year);


如果要对成员进行初始化,必须对所有的成员进行初始化

struct Date
    {
        public int year, month, day;
        public Date(int y, int m, int d)
        {
            year = y;
            month = m;
            day = d;
        }
        public Date(int y, int m)//会报错,因为day没有被初始化,此时可以赋一个默认初值0,  day=0;
        {
            year = y;
            month = m;
            
        }
    };


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

C# 结构体的使用 的相关文章

  • 编译时运算符

    有人可以列出 C 中可用的所有编译时运算符吗 C 中有两个运算符 无论操作数如何 它们的结果始终可以在编译时确定 它们是sizeof 1 and 2 当然 其他运算符的许多特殊用途可以在编译时解决 例如标准中列出的那些整数常量表达式 1 与
  • 没有强命名的代码签名是否会让您的应用程序容易被滥用?

    尝试了解authenticode代码签名和强命名 我是否正确地认为 如果我对引用一些 dll 非强命名 的 exe 进行代码签名 恶意用户就可以替换我的 DLL 并以看似由我签名但正在运行的方式分发应用程序他们的代码 假设这是真的 那么您似
  • “构建”构建我的项目,“构建解决方案”则不构建

    我刚刚开始使用VS2010 我有一个较大的解决方案 已从 VS2008 成功迁移 我已将一个名为 Test 的控制台应用程序项目添加到解决方案中 选择构建 gt 构建解决方案不编译新项目 选择构建 gt 构建测试确实构建了项目 在失败的情况
  • 为什么 C# Array.BinarySearch 这么快?

    我已经实施了一个很简单用于在整数数组中查找整数的 C 中的 binarySearch 实现 二分查找 static int binarySearch int arr int i int low 0 high arr Length 1 mid
  • 在结构中使用 typedef 枚举并避免类型混合警告

    我正在使用 C99 我的编译器是 IAR Embedded workbench 但我认为这个问题对于其他一些编译器也有效 我有一个 typedef 枚举 其中包含一些项目 并且我向该新类型的结构添加了一个元素 typedef enum fo
  • 不支持将数据直接绑定到存储查询(DbSet、DbQuery、DbSqlQuery)

    正在编码视觉工作室2012并使用实体模型作为我的数据层 但是 当页面尝试加载时 上面提到的标题 我使用 Linq 语句的下拉控件往往会引发未处理的异常 下面是我的代码 using AdventureWorksEntities dw new
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • 不同枚举类型的范围和可转换性

    在什么条件下可以从一种枚举类型转换为另一种枚举类型 让我们考虑以下代码 include
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new
  • C++ 标准是否指定了编译器的 STL 实现细节?

    在写答案时this https stackoverflow com questions 30909296 can you put a pimpl class inside a vector我遇到了一个有趣的情况 这个问题演示了这样一种情况

随机推荐

  • 爬虫基础--requests基础操作

    目录 一 requests是什么 二 使用步骤 1 环境安装 2 编码流程 3 模拟浏览器的侧重点 请求头模拟 请求参数模拟 三 两个请求 1 get请求 使用requests发起get请求 2 post请求 post请求的主要参数 使用r
  • 写作工具助手

    写作猫 www xiezuocat com 5118 www 5118 com 15201 www 15201 com 小发猫 www xiaofamao com 火龙果写作 www mypitaya com 智媒AI www zhimei
  • 计算机基础知识(基础入门小白专属)十

    作者 小刘在这里 每天分享云计算网络运维课堂笔记 疫情之下 你我素未谋面 但你一定要平平安安 一 起努力 共赴美好人生 夕阳下 是最美的 绽放 愿所有的美好 再疫情结束后如约而至 目录 关于cpu 和主板 cpu 是什么 cpu 主要作用
  • Spring Boot项目如何实现微信和支付宝支付

    本文将为大家详细介绍如何在Spring Boot项目中实现微信和支付宝的支付功能 我们将首先对微信和支付宝的支付流程进行简要介绍 然后逐步引导大家完成支付功能的具体实现 文章内容如下 支付流程简介 项目环境配置 支付宝支付实现 微信支付实现
  • 可转债

    一家上市公司想发行可转债必须满足 连续三年盈利且平均ROE大于10 公司资产负债率小于70 公司累计待还债券余额小于公司净资产40 有这3条标准做保障 债券和股票不一样 前者收益是明确的 到期就能拿到100元票面值 约定利息 所以 你买入的
  • OC门与线与逻辑

    转 OC门与线与逻辑 OC门 又称集电极开路 漏极开路 与非门门电路 Open Collector Open Drain 为什么引入OC门 实际使用中 有时需要两个或两个以上与非门的输出端连接在同一条导线上 将这些与非门上的数据 状态电平
  • 1051 复数乘法

    复数可以写成 A Bi 的常规形式 其中 A 是实部 B 是虚部 i 是虚数单位 满足 i2 1 也可以写成极坐标下的指数形式 R e Pi 其中 R 是复数模 P 是辐角 i 是虚数单位 其等价于三角形式 R cos P isin P 现
  • 如何在虚拟机中安装ikuai软路由系统

    首先访问ikuai官网下载固件固件下载 爱快 iKuai 商业场景网络解决方案提供商 ikuai8 com 根据需求下载 然后创建一个虚拟机 点击下一步 选择更下载的ISO映像文件 点击下一步 点击下一步 设置一下名称和储存位置 点击下一步
  • 学习记录:C语言源文件在编译时产生multiple definition of xxx; xxx: first defined here 相关报错的解决方法

    问题描述 在ubunt18 04 gcc 7 5 0 上可以正常编译的程序在树莓派 gcc 10 2 0 上编译报错 报错如图 问题原因 在头文件内定义全局变量 在多个源文件中引用且未声明 解决方法一 在树莓派上安装7 5 0版本的gcc
  • CPU性能测试及Coremark简介

    衡量处理器的一个重要指标是功耗 另外一个重要指标便是性能 在处理器领域的 Benchmarks 非常众多 有某些个人开发的程序 也有某些标准组织 或者商业公司开发的Benchmarks 本文在此不加以一一枚举 在嵌入式处理器领域最为知名和常
  • 198. House Robber

    You are a professional robber planning to rob houses along a street Each house has a certain amount of money stashed the
  • Docker与DevOps的无敌组合,引爆你的创新潜能

    荣誉认证 51CTO博客专家博主 TOP红人 明日之星 阿里云开发者社区专家博主 技术博主 星级博主 微信公众号 iOS开发上架 本文由iOS开发上架原创 欢迎关注 点赞 收藏 留言 首发时间 2023年8月7日 坚持和努力一定能换来诗与远
  • 代码检查工具选型

    源码分析工具选型 1 目前各种主流源码分析工具简单介绍 1 1 checkstyle checkstyle产生于2001年 是以antlr作为java语法分析器的静态源码分析工具 通过checkstyle的xml配置文件可指定源码分析规则
  • 面试篇:虚拟机栈5连问,一听心里就乐了

    面试路上 滴 滴滴 师傅我们到哪了 我还要赶着面试呢 师傅 快了快了 下个路口就到了 真是服了这帮人了 不会开车净往里凑 听着司机师傅的抱怨声 不禁想起首打油诗 满目尾灯红 耳盈刺笛声 心忧迟到久 颓首似雷轰 一下车赶紧小跑就进了富丽堂皇的
  • Android 控件 RecyclerView 看这篇就够了

    Android 控件 RecyclerView 概述 RecyclerView是什么 从Android 5 0开始 谷歌公司推出了一个用于大量数据展示的新控件RecylerView 可以用来代替传统的ListView 更加强大和灵活 Rec
  • 记录生活(一)

    我为什么要写这篇文章呢 主要是想记录自己的生活 我今天刚学css HTML以前学过一点 2022年1月17日 当日下午做的这两个模板 素材文件夹是两个模板共用的的 布局分明 是用百分比 布局的 灰色部分是导航栏 白色部分是用户登录的头像 绿
  • 数据库课后习题

    数据库练习 1 在Course表中添加 教师 列 20个长度的变长字符串 2 为每门课程添加教师信息 3 将教师列修改为非空列 4 查询选修了刘老师的课程的学生 5 检索选修了课程号为C01或C02课程 且成绩高于或等于70分的学生的姓名
  • 如何区分物联网的三大系统

    物联网是基于Internet的各种物理产品信息服务的综合 它主要由三个系统组成 一个是运营支撑系统 即相关应用服务软件 门户 管道 终端等的管理 其二是传感器网络系统 即通过现有的Internet 广电网络 通信网络等实现数据传输和计算 三
  • 最短路经算法简介(Dijkstra算法,A*算法,D*算法)

    转自 http www embhelp com drew algorithm shortpath htm 作者 Drew 据 Drew 所知最短路经算法现在重要的应用有计算机网络路由算法 机器人探路 交通路线导航 人工智能 游戏设计等等 美
  • C# 结构体的使用

    先说一下结构体和类的区别 1 结构体定义的是变量 保存在栈当中 类的对象 实例 保存在堆当中 引用保存在栈当中 结构体是值类型 类是引用类型 2 不能在结构体中定义默认的构造方法 无参 类中可以定义 3 结构体中自定义构造方法后 编译器会提