当前位置: 首页 > 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总结了结构的构造函数和析构函数的使用。

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

相关文章:

  • 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:宫崎骏风格插画
  • 购物网站开发的描述/免费友情链接网页
  • 做网站卖东西赚钱么/如何制定会员营销方案
  • 山西为啥突然爆发疫情/衡阳seo快速排名
  • 深圳网站建设 百业/推广百度百科
  • 珠海网站关键词推广/seo优化价格
  • 简述jsp网站开发的环境配置过程/襄阳seo优化排名