CShard入门009-字段,属性,索引器,常量

–刘铁猛《C#语言入门详解》


字段

什么是字段

  • 字段是一种表示与对象或类型关联的变量
  • 字段是类型的成员。旧称”成员变量“
  • 与对象关联的字段称作”实例字段“
  • 隶属于某个对象,某个对象的实例字段组个起来就表示了这个对象的当前状态
  • 与类型关联的字段称作”静态字段“,有static修饰
  • 隶属于某个类型,用来表示某个类型当前的状态

字段的声明

  • 字段声明在类里
  • 最简单的形式:类型+名称: int MyField
  • 字段的声明带有分号,但不是语句
  • 字段的名字一定是名词

字段的初始值

  • 无显式初始化时,字段获得其类型的默认值,所以字段“永远都不会未被初始化”,换句话说:字段一定有初始值。
  • 实例字段初始化的时机:对象实例化创建时,若要改变初始值:
  • 在实例构造函数中:“this.实例字段 = 初始值”
  • 在声明中:类型+实例字段=初始值
  • 静态字段初始化的时机:类型被加载时
  总结:
  实例字段的初始化时机实在创建一个对象的时候进行。
  静态字段的初始化时机实在运行环境加载该数据类型的时候,并且静态字段的初始化执行一次,即第一次被加载的时候。

只读字段

  • 实例只读字
  • 静态只读字段

属性

什么是属性

  • 属性是一种用于访问对象或类型的特征的成员,特征反映了状态
  • 属性是字段的自然扩展
  • 命名:字段更偏向于实例对象在内存的布局。属性更偏向反映现实世界对象的特征
  • 对外:暴露数据,数据可以是存储在字段里,也可以是动态计算出来的
  • 对内:保护字段不被非法值“污染”
  • 属性由Get/Set方法进化而来 原始版
  • 这个方法就是人们最初用来保护值不被污染的方法
  • 在c++,java中依然在使用这个方法(这两种语言中没有属性)

C#版

属性中的value是自带,叫做“上下文关键字”,代表用户传进来的值。

属性的本质

  • 属性的本质是两个方法get 和 set。 用于对外提供访问类内private字段的路径。
  • 属性可以理解为一个语法糖。get 方法是提供类外获取private字段值的途径,set 方法是提供类外对类内private字段赋值的合法途径。

属性的声明

  • 完整声明:后台成员变量和访问器(上图)
  • 简略声明:只有访问器
  • 例:public int Age{get; set;}
  • 动态计算值的属性
  • 注意实例属性和静态属性
  • 属性的名字一定是名词
  • 属性有“只读”和“只写”,但是基本见不到“只写”。

属性和字段的关系

  • 关系
  • 属性和字段都用于表示实体的状态
  • 属性是字段的包装器(wrapper),可以看作属性是字段的延伸
  • 建议使用属性来暴露数据(属性可以是public的,字段最好private和protected)
属性字段
归属函数成员类成员
内存不一定分配内存根据类型分配内存
操作执行代码操作赋值和读取

索引器

什么是索引器

  • 索引器是一组get和set访问器,是一种特殊的属性,允许类的实例像数组一样通过索引来访问和设置对象的元素
  • 通过索引器,可以为类提供类似数组的访问方式,使得对象可以像集合一样进行索引访问。
  • 拥有索引器的类一般都是集合类型(有例外)

索引器和属性

属性索引器
内存分配不需要分配内存来存储不需要分配内存来存储
关联的数据成员数量单个单个或多个

索引器的声明

  • 格式:类型+this+[参数]
  • 和属性一样:有一个类型和set/get访问器
  • 和属性不同:索引器方括号内必须要有参数,索引器没有名称,在名称的位置是关键字this。

常量

什么是常量

  • 常量:用来表示常量值的类成员(要避免跟静态成员搞混)
  • 成员常量:类的成员
  • 局部常量:在局部声明的常量

常量和静态成员的比较

相同点:

1. 共享性质:常量和静态成员都是在类级别上定义的,可以被该类的所有实例共享。
2. 不可修改性:常量和静态成员的值在程序运行时通常是不可修改的。

不同点:

1. 值的特性:常量的值在编译时必须被赋值并且不能被改变;静态成员的值在运行时被赋值,但通常也不能被修改。
2. 定义方式:常量使用 const 关键字定义,并且必须在声明时进行初始化;静态成员使用 static 关键字定义,可以包括静态字段、静态属性、静态方法等。
3. 范围:常量是针对值类型的,而静态成员可以是值类型或者引用类型。
4. 存储方式:常量的值在每个使用它的地方都会被直接替换为其字面值,而静态成员的值在内存中只有一份。

总的来说,常量和静态成员都用于在类级别上表示固定值或共享状态,但它们的定义、赋值和使用方式有所不同。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇