字段
- 什么是字段
字段是一种表示与对象或类型(类与结构体)关联的变量
字段是类型的成员,旧称“成员变量”
与对象关联的字段亦称“实例字段”
与类型相关联的字段称为“静态字段”,由 static 修饰 - 字段的声明
字段的声明一定是名词
尽管字段带有分号,但不是语句
(特性) (修饰符)数据类型 标识符; - 字段的初始值
无显式初始化时,字段获得其类型的初始值,所以字段“永远不会未被初始值”
实例字段初始化的时机——对象被创建时
静态字段初始化的时机——类型被加载(load)时 - 只读字段
实例只读字段
静态只读字段
字段修饰符:new, public,private, protected, internal, private, static, readonly(只读), volatile
ps:
- 只读字段只能在构造器中赋值,只有一次
- 静态字段在静态构造方法中赋值
属性
- 什么是属性
属性是一种用于访问对象或类型的特征的成员,特征反映了状态
属性是字段的自然拓展
从命名上看,字段更偏向于实例对象在内存中的布局,属性更偏向于反应现实世界对象的特征
对外:暴露数据,数据可以存储在字段里,也可以是动态计算出来的
对内:保护字段不被非法值“污染” - 属性的声明
完整的声明—后台成员变量与访问器
(特性)(修饰符) 数据类型 标识符{}
private int age;
public int Age
{
get{return this.age}
if(value >= 0 && value <= 120)
{
this.age = value;
}
else
{
throw new Exception("Age value has error");
}
}
// value 关键字表示传入的值
简略的声明—只有访问器
(特性)(修饰符) 数据类型 标识符{get;set} int x {get; set}
动态计算值的属性
private int age{get;set}
public bool Canwork
{
get
{
if(this.age >= 18)
{
return true;
}
else
{
return false;
}
}
}
注意实例属性和静态属性
属性的名字一定是名词
只读属性—只有getter没有setter(只写属性无意义)
- 属性与字段的关系
索引器
- 什么是索引器
索引器:他使对象能够与数组相同的方式(即使用下标)进行索引 - 索引器的声明
常量
- 什么是常量
常量是表示常量值(即可以在编译时计算的值)的类的成员
常量隶属于类型而不是对象,即没有“实例常量” - 常量的声明
(特性)const 数据类型 标识符 = 变量初始化器 - 各种只读的场景
为了提高程序的可读性—常量
为了防止对象的值被改变—只读字段
向外暴露不允许修改的数据—只读属性(静态或非静态),功能与常量有一些重叠
当希望常量的值其类型不能被常量声明接受时(类/自定义结构体)——静态只读字段