属性
个人理解就是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修饰符),这是面向对象思想所提倡的。
