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

C# 结构(属性和字段初始化语句和结构是密封的)

属性和字段初始化语句

在声明结构体时,不允许使用实例属性和字段初始化语句,如下所示。

struct Simple
{public int x=0;    //编译错误public int y=10;   //编译错误public int prop1{get;set;}=5;//编译错误
}

但是,结构体的静态属性和静态字段都可以在声明结构体时进行初始化,即使结构体本身不
是静态的。

结构是密封的

结构总是隐式密封的,因此,不能从它们派生其他结构。
由于结构不支持继承,个别类成员修饰符用在结构成员上将没有意义,因此不能在结构成员
声明中使用。不能用于结构的修饰符如下:

  • protected
  • protected internal
  • abstract
  • sealed
  • virtual

结构本身派生自System.ValueType,而System.ValueType派生自object。
两个可以用于结构成员并与继承相关的关键字是new和override修饰符,当创建一个和基类
System.ValueType的成员同名的成员时可使用它们。所有结构都派生自system.ValueType。

装箱和拆箱

如同其他值类型数据,如果想将一个结构实例作为引用类型对象,必须创建装箱(boxing)
的副本。装箱的过程就是制作值类型变量的引用类型副本。装箱和拆箱(unboxing)将在第17章
详细阐述。

结构作为返回值和参数

结构可以用作返回值和参数。

  • 返回值当结构作为返回值时,将创建它的副本并从函数成员返回。
  • 值参数当结构被用作值参数时,将创建实参结构的副本。该副本用于方法的执行中。
  • ref和out参数如果把一个结构用作ref或out参数,传人方法的是该结构的一个引用,
    这样就可以修改其数据成员。

关于结构的更多内容

对结构进行分配的开销比创建类实例小,所以使用结构代替类有时可以提高性能,但要注意
装箱和拆箱的高昂代价。
关于结构,需要知道的最后一些事情如下。

  • 预定义简单类型(int、short、long,等等),尽管在.NET和C#中被视为原始类型,但
    它们实际上在.NET中都实现为结构
  • 可以使用与声明分部类相同的方法声明分部结构,如第7章所述。
    结构和类一样,可以实现接口。接口将在第16章阐述。
http://www.xdnf.cn/news/1020295.html

相关文章:

  • C#最佳实践:推荐使用 null 条件运算符调用事件
  • 软考 系统架构设计师系列知识点之杂项集萃(88)
  • 偷懒一下下
  • 在C#中的乐观锁和悲观锁
  • 双碳时代多场景能耗管理实战:数据中心、工业园、商业体如何精准降本?
  • 论坛系统自动化测试
  • C# .NET Core 源代码生成器(dotnet source generators)
  • ROS2编译的理解,与GPT对话
  • 浏览器播放监控画面
  • 【谷歌登录SDK集成】
  • torch 高维矩阵乘法分析,一文说透
  • 信号(瞬时)频率求解与仿真实践(2)
  • 数据库中的Schema是什么?不同数据库中Schema的含义
  • 使用HashMap或者List模拟数据库插入和查询数据
  • 橡胶厂生产线的“协议翻译官”:DeviceNet转Modbus RTU网关实战记
  • PCB 层压板的 Dk 和 Df 表征方法 – 第一部分
  • Linux(Centos 7.6)命令详解:w
  • 从0开始学习R语言--Day22--km曲线
  • 可视化图解算法51:寻找第K大(数组中的第K个最大的元素)
  • 第32节 Node.js 全局对象
  • Nginx 负载均衡、高可用及动静分离
  • CRM管理软件如何实现客户成功管理?
  • Unity3D仿星露谷物语开发62之添加NPC角色
  • 第六章 进阶21 奶茶周会没了奶茶
  • 如何用4 种可靠的方法更换 iPhone(2025 年指南)
  • Vuex相关知识点
  • Flutter项目编译到鸿蒙模拟器报错
  • Vue3 Element Plus 表格默认显示一行
  • Linux爬虫系统从开始到部署成功全流程
  • 国产智能体“双子星”:实在Agent vs Manus(核心架构与技术实现路径对比)