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

C#入门 017 字段,属性,索引器,常量

字段,属性,索引器,常量都表示数据

字段

什么是字段

  • 字段(field)是一种表示与对象或类型(类与结构体)关联的变量
  • 字段是类型的成员,又称“成员变量,写在类体里面
  • 与对象关联的字段亦称“实例字段,表示某个对象的状态
  • 与类型关联的字段称为“静态字段”,由static修饰,表示某个类(类型)的状态

字段的声明

  • 参见C#语言定义文档
  • 尽管字段声明带有分号,但它不是语句 ,语句在方法体里面
  • 字段的名字一定是名词

字段的初始值

  • 无显式初始化时,字段获得其类型的默认值,所以字段“永远都不会未被初始化
  • 实例字段初始化的时机--对象创建时
  • 静态字段初始化的时机--类型被加载(load)时

只读字段

  • 实例只读字段
  • 静态只读字段
  • readonly修饰符, const必须在声明的同时初始化,readonly可以在构造函数中初始化。

属性

什么是属性

  • 属性(property)是一种用于访问对象或类型的特征的成员,特征反映了状态
  • 属性是字段的自然扩展
    • 从命名上看,field更偏向于实例对象在内存中的布局,property更偏向于反映现实世界对象的特征
    • 对外暴露数据,数据可以是存储在字段里的,也可以是动态计算出来的
    • 对内:保护字段不被非法值“污染
  • 属性由Get/Set方法对进化而来
  • 又一个“语法糖”--属性背后的秘密

属性的声明

  • 完整声明--后台(back)成员变量与访问器(注意使用code snippet和refactor工具 )
  • propfull 完整声明

  • 简略声明--只有访问器(查看儿IL代码 ) 提供了更多的灵活性,允许在访问属性时执行复杂的逻辑。
  • prop 简略声明 多用于传递数据 适用于不需要额外逻辑的情况

  • 动态计算值的属性
  • 动态计算CanWork值的属性

  • 注意实例属性和静态属性
  • 属性的名字一定是名词只读属性--只有getter没有setter
    • 尽管语法上正确,几乎没有人使用“只写属性”,因为属性的主要目的是通过向外暴露数据而表示对象/类型的状态

属性与字段的关系

  • 一般情况下,它们都用于表示实体(对象或类型)的状态
  • 属性大多数情况下是字段的包装器(wrapper )
  • 建议:永远使用属性(而不是字段)来暴露数据,即字段永远都是private或protected的

索引器( 概述 )

什么是索引器

索引器 (indexer) 是这样一种成员:它使对象能够用与数组相同的方式(即使用下标)进行索引索引器的声明

参见C#语言定义文档

注意:没有静态索引器

什么是常量

  • 常量(constant) 是表示常量值(即,可以在编译时计算的值)的类成员
  • 常量隶属于(类)类型而不是对象,即没有“实例常量” 类型.常量
    • “实例常量”的角色由只读实例字段来担当
  • 注意区分成员常量与局部常量

常量的声明

各种”只读”的应用场景

  • 为了提高程序可读性和执行效率--常量
  • 为了防止对象的值被改变---只读字段
  • 向外暴露不允许修改的数据--只读属性(静态或非静态),功能与常量有一些重叠
  • 当希望成为常量的值其类型不能被常量声明接受时(类/白定义结构体)--静态只读字段

http://www.mrgr.cn/news/69102.html

相关文章:

  • 【学习】HTTP
  • C# 选择文件夹路径
  • 【分布式】CAP理论
  • Ubuntu22.04.2 k8s部署
  • 直流保护电路设计及保护器件参数说明和选型
  • 在uniapp中使用canvas封装组件遇到的坑,数据被后面设备覆盖,导致数据和前面的设备一样
  • 深入 MyBatis-Plus 插件:解锁高级数据库功能
  • ProcessBuilder调用脚本执行
  • Qt使用属性树(QtProPertyBrowser)时,引用报错#include “QtTreePropertyBrowser“解决方案
  • 星期-时间范围选择器 滑动选择时间 最小粒度 vue3
  • 浅谈web性能测试
  • 智能问答系统流程详解:多轮对话与模型训练的技术要点及案例
  • Unet++改进11:添加MLCA||轻量级的混合本地信道注意机制
  • Linux可视化工具cockpit
  • tar | 打包 | 压缩 | 文件搜索 | 常用命令(二)
  • 浮点数转4字节数组在线转换工具
  • Python内置函数1详解案例
  • Python 基础语法 二维列表
  • Sigrity SPEED2000 Power Ground Noise Simulation模式如何进行电源阻抗仿真分析操作指导(一)-无电容
  • 【贪心】【哈希】个人练习-Leetcode-1296. Divide Array in Sets of K Consecutive Numbers
  • 国内AI工具复现GPTs效果详解
  • Rust项目中的Labels
  • 程序开发时单数复数及前缀的命名规范(目录名、文件名、函数名、变量名、数据库字段等)
  • ONLYOFFICE 8.2深度测评:集成PDF编辑、数据可视化与AI功能的强大办公套件
  • Chromium 中chrome.system.memory扩展接口定义c++
  • AWTK fscript 中的 日期时间 扩展函数