当前位置: 首页 > 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.lryc.cn/news/483320.html

相关文章:

  • 磐石云语音助手拦截介绍
  • JSP执行过程及其与Servlet执行效率的比较
  • open3d
  • Vue中优雅的使用Echarts的三种方式
  • SpringBoot配置文件/日志
  • 微服务架构面试内容整理-SpringCloud Netflix‌与Spring Cloud Alibaba比较
  • JDBC魔法:连接MySQL数据库与数据操作的秘籍
  • 深入了解Scratch:引导初学者开启编程之旅
  • js复制内容到剪切板
  • 代码 RNN原理及手写复现
  • 企业官网的在线客服,如何提高效果?
  • 「实战应用」如何可视化 DHTMLX Scheduler 中的资源工作量?
  • 论文阅读《BEVFormer》
  • sql专题 之 sql的执行顺序
  • Vue3 -- 基于Vue3+TS+Vite项目【项目搭建及初始化】
  • CTF-RE: TEA系列解密脚本
  • 信号量和线程池
  • 【人工智能】10分钟解读-深入浅出大语言模型(LLM)——从ChatGPT到未来AI的演进
  • 「QT」几何数据类 之 QPointF 浮点型点类
  • 可能是全网第一个MySQL Workbench插件编写技巧
  • D62【python 接口自动化学习】- python基础之数据库
  • 探索美赛:从准备到挑战的详细指南
  • IP地址查询——IP归属地离线库
  • “倒时差”用英语怎么说?生活英语口语学习柯桥外语培训
  • Linux入门攻坚——37、Linux防火墙-iptables-3
  • 微服务架构面试内容整理-安全性-Spring Security
  • 新的服务器Centos7.6 安装基础的环境配置(新服务器可直接粘贴使用配置)
  • 深度学习:广播机制
  • 音视频入门基础:FLV专题(25)——通过FFprobe显示FLV文件每个packet的信息
  • Openstack7--安装消息队列服务RabbitMQ