当前位置: 首页 > 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章阐述。

相关文章:

  • 机器学习算法_聚类KMeans算法
  • Mac电脑数据恢复工具-Disk 企业版
  • 使用 ollama 在 mac 本地部署一个 qwen3:8b 模型
  • mac安装mvnd结合idea
  • Wi-Fi 6 在 2.4GHz 频段的速率与优化分析
  • 数据可视化——一图胜千言
  • Kafka环境搭建全攻略:从Docker到Java实战
  • Visual Studio Code 1.101.0 官方版
  • 列举开源的模型和推理框架
  • 【Java学习笔记】集合介绍
  • .NetCore 8 反射与源生成器(Reflection vs Source Generators)
  • aflplusplus:开源的模糊测试工具!全参数详细教程!Kali Linux教程!(二)
  • C# .NET Core 源代码生成器(dotnet source generators)
  • ASP.NET Core 中快速读取配置的最佳实践
  • 案例:城市“光革命”背后,塔能科技的智能照明进化方程式
  • 微软Copilot两大创新功能详解:SharePoint Agents vs. Copilot Notebooks
  • OCP 认证培训:踏入 Oracle 数据库专家的殿堂
  • Spark 之 Subquery
  • 解析Android SETUP_DATA_CALL 链路信息字段
  • 期权备兑策略选择什么价值的合约?
  • 网站网站地图怎么做/免费发布信息网网站
  • 做网站的公司重庆/网络销售怎么学
  • 手机怎样设计网站建设/成都品牌推广
  • 玉林网站建设/网站搜什么关键词
  • 免费教做面食的网站/百度关键词排名查询工具
  • 全套的网站建设教程含前端和后端/百度新闻头条