字段,属性,索引器,常量
这四种成员都是用来表达数据的。
1.字段(field)
(1)什么是字段
字段是一种表示与对象或类型(类与结构体)关联的变量。为一个对象或类型存储数据。多个字段组合起来可以表示对象或类型的状态。
字段是类型的成员,旧称成员变量。
与对象相关联的字段亦称“实例字段”,隶属于实例对象。
与类型关联的字段称为“静态字段”,由static修饰,表示类型状态。
(2)字段的声明
字段是类的成员,声明于类体里。
构成:可选的特性+可选的字段修饰符+字段数据类型+变量声明器(变量名/变量名加初始化器);
尽管字段声明带有分号,但它不是语句。
字段的名字一定是名词。
(3)字段初始值
无显式初始化时,字段获得其类型的默认值,所以字段永远都不会未被初始化。
实例字段初始化时机——对象创建时。
静态字段初始化的时机——类型被加载(load)时,即静态构造器被加载的时候。
(4)只读字段
实例只读字段,唯一的初始化机会是在实例构造器里为它赋值。
静态只读字段,初始化机会只有一个,在静态构造器里。
2.属性(porperty)
(1)什么是属性
是一种用于访问对象或类型的特征的成员,特征反映了状态。
属性是字段的自然扩展。对外可以实时动态的计算出对象或类型的特征。对内可以防止数据的污染。
属性由get何set方法对进化而来。
(2)属性如何声明
完整声明——后台(back)与访问器(注意使用code snippet和refactor工具),可选特性+属性的修饰符+属性数据类型+属性名字{get和或set}
简略声明——只有访问器。
动态计算值的属性。
注意实例属性和静态属性。
属性的名字一定是名词。
只读属性——只有getter没有setter
(3)属性与字段的关系
一般情况下,它们都用于表示实体(对象或类型)的状态。
属性大多数情况下是字段包装器。
建议:永远使用属性而不是字段来暴露数据,即字段永远是private。
3.索引器
(1)什么是索引器
索引器是这样一种成员:它使对象能够用与数组相同的方式(即下标)进行索引。
索引器一般用于集合类型里。
4.常量
(1)什么是常量
常量是表示常量值,即可以编译时计算的值的类成员。
常量属于类型而不是对象,即没有实例常量。
注意区分成员常量(类.常量的名字)与局部常量(用于组成方法体中的算法)。
4.各种只读应用的场景:
常量——用于提高程序可读性和执行效率
只读字段——为了防止对象的值被改变
只读属性——向外暴露不允许修改的数据,功能与常量有一些重叠。
静态只读字段——当希望成为常量的值其类型不能被常量声明接受时(类/自定义结构体)。
字段,属性,索引器,常量相关推荐
- 【笔记】《C#高效编程改进C#代码的50个行之有效的办法》第1章C#语言习惯(1)--属性的特性以及索引器(SamWang)...
************************************************************************** 书名:<C#高效编程改进C#代码的50个行之 ...
- C#索引器的实现、索引器和属性的异同对比,这些技能你get到了嘛?
目录 什么是索引器? 如何声明索引器? 索引器和属性的异同对比 索引器实例分析 Hello!大家好,我是努力赚钱买生发水的灰小猿! 最近在用C#做开发的时候要用到索引函数,所以今天就在这里和小伙伴记录 ...
- C#语法小知识(六)属性与索引器
属性是一种成员,它提供灵活的机制来读取.写入或计算私有字段的值. 属性可用作公共数据成员,但它们实际上是称为"访问器"的特殊方法. 这使得可以轻松访问数据,还有助于提高方法的安全性 ...
- c#初学-索引器get和set的使用(泛型类)
索引器允许类或结构的实例就像数组一样进行索引.索引器类似于属性,不同之处在于它们的访问器采用参数. 在下面的示例中,定义了一个泛型类,并为其提供了简单的 get 和 set 访问器方法(作为分配和检索 ...
- C#锐利体验-第八讲 索引器与操作符重载(转)
第八讲 索引器与操作符重载 南京邮电学院 李建忠(cornyfield@263.net) 索引 C#锐利体验 "Hello,World!"程序 C#语言基础介绍 Microsoft ...
- 第 17 节 字段、属性、索引器、常量
第17节 字段.属性.索引器.常量 字段 属性(C#所特有的) 索引器(概述) 常量 类的成员 字段 什么是字段 1)字段(field)是一种表示与对象或类型(类与结构体)关联的变量(为对象或类型存储 ...
- java类中定义索引器,C#面向对象基础——字段、属性和索引器
关于面向对象编程,在很多语言里面都出现过,最常用的如java和c++, C#语言关于面向对象编程的规范,我觉得介于上面两者之间,我的理解是它比较偏向c++,或许是因为跟它的析构函数有关系,像java有 ...
- 【Kotlin】属性 与 幕后字段 ( 属性声明 | 属性初始化器 | 属性访问器 | field 属性幕后字段 | lateinit 延迟初始化属性 )
文章目录 I . 属性 字段 总结 II . 属性声明 III . 属性初始化器 IV . get / set 属性访问器 V . 属性幕后字段 field VI . 变量和常量的区别 VII . 延 ...
- C# 属性、索引器(二)
属性 using System; namespace runoob {public abstract class Person{public abstract string Name{get;set; ...
最新文章
- 力扣:15三数之和(python)
- 君威u0073故障码解决_顽疾修复过程,君威没倒挡的变速箱故障就是这样修好
- skywalking(2)
- c语言单选题大全,C语言单选题(五)
- android Fragments详解一:概述
- jquery 读取checkbox
- php在浏览器输入路径,关于在sublime text 3 中配置一键浏览器打开php文件,并且是在localhost 本地服务器路径下...
- Springboot入门1
- 【Visio】 windows Visio 画图
- 一次量产恢复U盘真实容量的操作过程(安国主控芯片)
- 在Docker里部署ReviewBoard4.0-RC
- C语言实现埃拉托斯特尼筛法
- 摩克机器人_第三章 摩克都市的一场灾难(上)
- 王艾老哥------不是境况造就人,而是人造就境况。
- 多因素分析显示脂肪沉积比炎症损害更能预测强直性脊柱炎患者的脊柱新骨形成...
- html图片左右无缝循环滚动示例
- 大数据分析软件都有哪些平台?
- chown: changing ownership of ‘/var/lib/mysql/‘: Permission denied
- Xilinx vivado DDR3 MIG IP核中系统时钟、参考时钟解释及各个时钟的功能详解
- RK3399平台开发系列讲解(内核驱动外设篇)6.19、摄像头OV4689模组驱动代码分析