属性
个人理解就是C++中用于外部类调用该类的数据成员的方法,通过访问器声明可包含一个 get 访问器、一个 set 访问器,或者同时包含二者。例如:
// 声明类型为 string 的 Code 属性
public string Code
{
get
{
return code;
}
set
{
code = value;
}
}
一般采用Pascal命名法(首字母大写),数据类型要和对应的字段要一致。
value关键字就是当前类属性的值,比如下面的第8行的private int experience。
using UnityEngine;
using System.Collections;
public class Player
{
//成员变量可以称为
//字段。
private int experience;
//Experience 是一个基本属性
public int Experience
{
get
{
//其他一些代码
return experience;
}
set
{
//其他一些代码
experience = value;
}
}
//Level 是一个将经验值自动转换为
//玩家等级的属性
public int Level
{
get
{
return experience / 1000;
}
set
{
experience = value * 1000;
}
}
//这是一个自动实现的属性的
//示例
public int Health{ get; set;}
}
using UnityEngine;
using System.Collections;
public class Game : MonoBehaviour
{
void Start ()
{
Player myPlayer = new Player();
//属性可以像变量一样使用
myPlayer.Experience = 5;
int x = myPlayer.Experience;
}
}
从编译器理解
a.属性其实就是外界访问私有字段的入口,属性本身不保存任何数据,在对属性赋值和读取的时候其实就是操作的对应私有字段。
图例:
b.属性本质其实就是一个方法,通过get和set方法来操作对应的字段,通过反编译工具我们可以看出,如图:
属性的意义
A.避免出现非法数据,例如一个年龄属性,正常逻辑是年龄是不可以出现负数的,如果用户对年龄进行了负数的赋值,我们通过属性的set方法加入判断逻辑,从而排除这种非法数据。
示例:
B.限定属性只读或者只写,例如有些属性为了保护数据,我们只能读取,而不能赋值。具体使用的话,我们根据需要,屏蔽set或get方法达到只读和只写。
示例:
C.没有对应私有字段的属性,例如根据生日属性获取到年龄。
示例:
字段
关于字段
a.字段又称为:“成员变量”,一般在类的内部做数据交互使用。
b.字段命名规范:camel命名法(首单词字母小写)。
public class Myclass
{
private int age ;
public string name;
}
字段与属性比较
a.字段主要是为类的内部做数据交互使用,字段一般是private。
b.字段可读可写。
c.当字段需要为外部提供数据的时候,请将字段封装为属性,而不是使用公有字段(public修饰符),这是面向对象思想所提倡的。