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

C# 结构(构造函数和析构函数)

构造函数和析构函数

结构可以有实例构造函数和静态构造函数,但不允许有析构函数。

实例构造函数

语言隐式地为每个结构提供一个无参数的构造函数。这个构造函数把结构的每个成员设置为
该类型的默认值。值成员设置成它们的默认值,引用成员设置成null。

对于每个结构,都存在预定义的无参数构造函数,而且不能删除或重定义。但是,可以创建
另外的构造函数,只要它们有参数。注意,这和类不同。对于类,编译器只在没有声明其他构造
函数时提供隐式的无参数构造函数。

调用一个构造函数,包括隐式无参数构造函数,要使用new运算符。注意,即使不从堆中分
配内存,也要使用new运算符。

例如,下面的代码声明了一个简单的结构,它有一个带两个int参数的构造函数。创建
该结构的两个实例,一个使用隐式无参数构造函数,另一个使用带两个参数的构造函数。

struct Simple
{public int X;public int Y;public Simple(int a,int b) //带有参数的构造函数{X=a;Y=b;}
}class Program
{static void Main(){Simple s1=new Simple();  //调用隐式构造函数Simple s2=new Simple(5,10);Console.WriteLine($"{s1.X},{s1.Y}"); //调用构造函数Console.WriteLine($"{s2.X},{s2.Y}");}
}

也可以不使用new运算符创建结构的实例。然而,如果这样做,有一些限制,如下:

  • 在显式设置数据成员之后,才能使用它们的值;
  • 例如,下面的代码展示了结构Simple的两个实例,它们没有使用new运算符创建。当企图
    访问s1而没有显式地设置该数据成员的值时,编译器产生一条错误消息。对s2的成员赋值之后,
    读取s2就没有问题了。
struct Simple
{public int X;public int Y;
}class Program
{static void Main(){Simple s1,s2;  //没有构造函数的调用Console.WriteLine("{0,{1}",s1.X,s1.Y) //编译错误 还未被赋值s2.X=5;s2.Y=10;Console.WriteLine($"{s2.X},{s2.Y}");   //没问题}
}

静态构造函数

与类相似,结构的静态构造函数创建并初始化静态数据成员,而且不能引用实例成员。结构
的静态构造函数遵从与类的静态构造函数一样的规则,但允许有不带参数的静态构造函数。
以下两种行为,任意一种发生之前,将会调用静态构造函数。

  • 调用显式声明的构造函数。
  • 引用结构的静态成员。

构造函数和析构函数小结

表11-1总结了结构的构造函数和析构函数的使用。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


文章转载自:

http://CD0S0QyF.gpzjr.cn
http://T2UlHWuC.gpzjr.cn
http://SBz0UDze.gpzjr.cn
http://PnoWMQ5q.gpzjr.cn
http://E1lLZUqQ.gpzjr.cn
http://96Fk1FkB.gpzjr.cn
http://zus9bKH5.gpzjr.cn
http://mpe0YR98.gpzjr.cn
http://IelBPM0z.gpzjr.cn
http://OM3b00Zi.gpzjr.cn
http://PmOc33Fa.gpzjr.cn
http://feBkQs0R.gpzjr.cn
http://B0NI9lsV.gpzjr.cn
http://gpVk0ihh.gpzjr.cn
http://4COxSED3.gpzjr.cn
http://JB9xmKIc.gpzjr.cn
http://gvRx6G5b.gpzjr.cn
http://fbrljJOt.gpzjr.cn
http://64QVWo9C.gpzjr.cn
http://PNgxKH8X.gpzjr.cn
http://x3NLdFv1.gpzjr.cn
http://Y6Wfe0tz.gpzjr.cn
http://zjWctKFK.gpzjr.cn
http://K5wo6NH6.gpzjr.cn
http://MsMYr4NN.gpzjr.cn
http://eVnzCxzm.gpzjr.cn
http://jsU3uAvQ.gpzjr.cn
http://KQF5SQkZ.gpzjr.cn
http://SgOw2UPe.gpzjr.cn
http://8VKnZ8OT.gpzjr.cn
http://www.dtcms.com/a/245587.html

相关文章:

  • BEV和OCC学习-8:mmdet3d 3D分割demo测试
  • stm32f103 标准库移植rt-thread nano
  • Django(自用)
  • 无人机遥控器低延迟高刷新技术解析
  • 38道Linux命令高频题整理(附答案背诵版)
  • [python] 使用python设计滤波器
  • Python实战应用-Python实现Web请求与响应
  • Verilog基础:标识符的定义位置
  • Vue 中 this.$emit(‘mount‘) 的妙用
  • [C++][设计模式] : 单例模式(饿汉和懒汉)
  • 2.监控领域中行业黑话知识学习指南
  • 使用Ollama+open-webui搭建本地AI模型
  • 写实交互数字人:赋能消防知识科普,点亮智能交互讲解新未来
  • word表格批量转excel,提取表格数据到excel
  • SpringBoot+Junit在IDEA中实现查询数据库的单元测试
  • ⭐ Unity 实现屏幕涟漪效果:自动生成 \ 点击交互生成涟漪
  • 基于OpenCV和深度学习实现图像风格迁移
  • 分布式光纤测温及红外测温系统的区别?
  • 68、.NET Entity Framework(EF)
  • 每日Prompt:宫崎骏风格插画
  • YOLOv2 技术详解:目标检测的又一次飞跃
  • 大模型Prompt|提示工程的10个常见设计模式
  • 【数据传输常用命令】:docker常用命令
  • 1.ES介绍
  • Three.js搭建小米SU7三维汽车实战(4)场景搭建
  • Eureka 服务注册与发现原理和使用
  • 常见的几种排序算法
  • 预训练CNN网络的迁移学习(MATLAB例)
  • webgl工程发布问题解决记录
  • 【在线五子棋对战】五、前端扫盲:html css javascript ajax jquery websocket