当前位置: 首页 > news >正文

20250528-C#知识:结构体

C#知识:结构体

结构体是一种自定义数据类型,用户可以根据自身需求设计自己的结构体用来表示某种数据集合。结构体是一种值类型,结合了值类型的优点,避免了引用类型的缺点。本文简单介绍并探究一下C#中的结构体。


  • 结构体一般写在命名空间中
  • 结构体中成员默认为private的,包括构造函数
  • 结构体类似类,不过它是值类型,存储在栈上
  • 结构体支持运算符重载
  • 结构体可以继承接口
  • 结构体中可以存在成员变量、构造函数、成员函数
  • 结构体成员变量可在内部初始化*
  • 结构体的构造函数可以只初始化部分成员变量*
  • 结构体中可以自定义无参构造*
  • 结构体不能有析构函数
  • 结构体不能被继承,成员变量和函数不能用protect关键字修饰
  • 结构体不能被static修饰
  • 结构体不能在内部声明自身类型的结构体变量
namespace LearnStruct
{struct Point : IComparable<Point>{//结构体中可以存在成员变量、构造函数、成员函数//结构体不能有析构函数//结构体不能被继承,成员变量和函数不能用protect关键字修饰//结构体不能被static修饰//结构体不能在内部声明自身类型的结构体变量public int x = 2;   //结构体成员变量在内部初始化public int y;int z;public Point() => Console.WriteLine("结构体无参构造被调用");public Point(int x) => this.x = x;public Point(int x, int y) : this(x) => this.y = y;public Point(int x, int y, int z) : this(x, y) => this.z = z;public int CompareTo(Point other){if (other.x > this.x)return -1;else if (other.x < this.x)return 1;return 0;}public void Print(){Console.Write($"x = {this.x},");Console.Write("y = {0},", this.y);Console.WriteLine("z = " + this.z);}public static Point operator +(Point _self, Point _other){return new Point(_self.x + _other.x, _self.y + _other.y, _self.z + _other.z);}}internal class Program{static void ChangeValue(Point point){point.x += 1;point.y += 1;}static void Main(string[] args){//结构体一般写在命名空间中Point p1 = new Point(); //结构体无参构造被调用Point p2;   //声明结构体变量,需要进行初始化后才能使用p2 = new Point();   //结构体无参构造被调用Console.WriteLine(p1.x);    //2Console.WriteLine(p2.x);    //2//结构体中成员默认为private的,包括构造函数,p2.z点不出来//结构体类似类,不过它是值类型,存储在栈上Point p3 = new Point(1, 2, 3);p3.Print(); //x = 1,y = 2,z = 3ChangeValue(p3);p3.Print(); //x = 1,y = 2,z = 3//结构体支持运算符重载Point p4 = new Point(3, 3, 3);Point p5 = new Point(6, 6, 6);Point p6 = p4 + p5;p6.Print(); //x = 9,y = 9,z = 9//结构体可以继承接口List<Point> points = new List<Point>();points.Add(new Point(2, 3, 1));points.Add(new Point(9, 6, 3));points.Add(new Point(3, 5, 6));points.Add(new Point(8, 8, 8));points.Sort();foreach (Point p in points)p.Print();/*输出:x = 2,y = 3,z = 1x = 3,y = 5,z = 6x = 8,y = 8,z = 8x = 9,y = 6,z = 3*/}}
}

参考资料:

  1. 《唐老狮C#》

本篇结束,感谢您的阅读

在这里插入图片描述

http://www.xdnf.cn/news/688933.html

相关文章:

  • C# Socket对象创建方式详解
  • C接口 中文字符问题
  • 针对C++开发工具推荐及分析(涵盖IDE、编译器、调试工具和辅助工具)
  • 电脑开机后出现bootmgr is conmpressed原因及解决方法
  • 【Redis】基本架构
  • Dockerfile 构建优化的方法
  • 智变与重构:AI 赋能基础教育教学的范式转型研究报告
  • 理解 Vue 2 的响应式原理:数据劫持与依赖收集的背后
  • 第八天:面向对象编程
  • React---day3
  • CVE-2017-12629-XXE源码分析与漏洞复现
  • 设计模式24——访问者模式
  • 【AUTOSAR OS】 保护功能解析:从原理到应用与源代码解析(下篇)
  • 《Python+AI如何颠覆传统文书审查模式》
  • 【网络安全】——Modbus协议详解:工业通信的“通用语言”
  • JS 逆向太费劲,试试 JS 注入!
  • 服务器上用脚本跑python深度学习的注意事项(ubantu系统)
  • 【第2章 绘制】2.6 阴影
  • 基于stm32LORA无线抄表系统仿真
  • 人工智能在智能建筑中的创新应用与未来趋势
  • 将docker容器保存为镜像,让后将镜像打包保存到本地
  • WPF的基础控件:布局控件(StackPanel DockPanel)
  • React+Antd全局加载遮罩工具
  • 2. 数据结构基本概念 (2)
  • LLM 对齐新范式:深入解析 DPO (Direct Preference Optimization) 的原理与实践
  • Microsoft的在word中选择文档中的所有表格进行字体和格式的调整时的解决方案
  • 180 度 = π 弧度
  • 2025吉林ccpc【部分题解】
  • c++第三天(对象与构造函数)
  • ICDMC 2025:创新媒体模式,迎接数字时代的挑战