17 字段,属性,索引器,常量

字段

1 什么是字段

        ·字段(field)是一种表示与对象或类型(类或结构体)关联的变量

        ·字段是类型的成员,旧称“成员变量”

        ·与对象关联的字段亦称“实例字段”(实例字段的组合是用来表示对象当前的状态)

                  对于实例字段而言,初始化的时机是在实例被创建的时候,即每次创建实例都可以执行初始化(实例构造函数执行的时候)

        ·与类型关联的字段称为“静态字段”,由static修饰(静态字段的组合用来表示某个数据类型当前的状态)

                比如下面这个例子:学生这个数据类型的状态是:学生并不多,只有两个

                对于静态字段而言,初始化的时机是在运行环境加载数据类型的时候,即只在数据类型第一次被加载的时候执行初始化(静态构造器被执行的时候)

2 字段的声明

        ·尽管字段声明带有分号,但它不是语句

        ·字段的名字一定是名词

3 字段的初始值

        ·无显式初始化时,字段获得其类型的默认值,所以字段“永远不会未被初始化”

        ·实例字段初始化的时机——对象创建时

        ·静态字段初始化的时机——类型被加载(load)时

4 只读字段

        ·实例只读字段

        ·静态只读字段

属性

1 什么是属性

        ·属性(property)是一种用于访问对象或类型的特征的成员,特征反映了状态

        ·属性是字段的自然扩展

                ·从命名上看,field更偏向于实例对象在内存中的布局,property更偏向于反映现实世界对象的特征

                ·对外:暴露数据,数据可以是存储在字段里的,也可以是动态计算出来的

                ·对内:保护字段不被非法值“污染”

        ·属性由Get/Set方法对进化而来

                ·不合法的值“污染”字段

                ·防止不合法的值“污染”字段

                ·引入更方便的属性的概念

2 属性的声明

        ·完整的声明——后台(block)成员变量与访问器(注意使用code snippet和refactor工具)

                ·代码提示propfull

                ·静态属性的声明

           ·简略声明——只有访问器(查看IL代码)

                ·代码提示prop

                ·通过简略声明声明的属性 在功能上与一个公有的字段完全相同(不受保护)

                ·好处是:声明起来非常简单,主要作用是传递数据

         ·动态计算值的属性

                ·实现目标:16岁以上判定为可以工作;16岁以下判定为不可以工作

                        ·下面的两种方法适用于不同的情况(Student类在两种方法中对外的接口并没有改变,只是改变了内部的逻辑)

                        ·方法一:适用于Age经常被设定为不同的值,而canWork的值不经常被访问的情况(被动计算canWork的值)

                         ·方法二:适用于canWork的值被访问地很频繁的情况(主动计算canWork的值)

        ·属性的名字一定是名词

        ·只读属性——只有getter没有setter

                ·另一种属性(有setter,但是setter是private的,所以它的setter不能从外界进行访问)

3 属性与字段的关系

        ·一般情况下,它们都用于表示实体(对象或类型)的状态

        ·属性大多数情况下是字段的包装器(wrapper)

        ·建议:永远使用属性(而不是字段)来暴露数据,即字段永远都是private或protected的

索引器

1 什么是索引器

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

                ·索引器一般情况下都是用在集合类型里,下面的例子将索引器应用在了非集合的情况下(很少见)

                ·初学者很少有机会去写索引器

2 索引器的声明

        ·参见C#语言定义文档

        ·注意:没有静态索引器

常量

1 什么是常量

        ·常量(constant)是表示常量值(即,可以在编译时计算的值)的类成员

        ·常量隶属于类型而不是对象,即没有“实例常量”

                “实例常量”的角色由只读实例字段来担当

        ·注意区分成员常量与局部常量

                ①Int.Maxvalue或者Math.PI都是类的成员,所以叫做成员常量;

                ②局部常量(用于参与组成方法体中的算法)

 2 常量的声明

 3 各种“只读”的应用场景

        ·为了提高程序可读性和执行效率——常量(用于存储一个不变的值)

        ·为了防止对象的值被改变——只读字段

        ·向外暴露不允许修改的数据——只读属性(静态或非静态),功能与常量有一些重叠

        ·当希望成为常量的值其类型不能被常量声明接受时(类\自定义结构体)——静态只读字段

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值