Unity知识--C#属性

属性概念

在C#中,属性是类、结构和接口的成员。它们提供灵活的机制来读取、编写或计算私有字段的值。属性可以被看作是对字段访问的封装,允许你定义获取(get)和设置(set)这些字段值的方法,而无需直接暴露字段本身。在Unity中主要是为了封装和保护字段。

属性在Unity中的使用

假设我们有一个玩家血量脚本

using UnityEngine;

public class PlayerHealth : MonoBehaviour
{
    
    public int health = 100;

    public int Health
    {
        get { return health; }
        set
        {
            health = Mathf.Clamp(value, 0, 100); // 确保health在0到100之间
            if (health <= 0)
            {
                Die(); // 当健康值小于等于0时调用Die方法
            }
        }
    }
}

肯定要有一个血量的字段,我们可以再给血量加一个属性,这个Health属性包含get和set访问器,分别对应“读”和“写”操作。

PlayerHealth playerHealth=new PlayerHealth();
playerHealth.Health=50;//给玩家血量设为50,对应它的set访问器



//通过get访问器,来读取玩家血量
if(playerHealth.Health<10){
print(“玩家进入低血量状态”)
}
//直接“点”字段
PlayerHealth playerHealth=new PlayerHealth();
playerHealth.health=50;//直接将health这个字段设为50

//如果不通过属性
playerHealth.health=200;
//这样给health这个字段赋值为200,但显然这是不符合我们预期的,因为我们规定要将玩家血量范围为0-100

可以看到,属性和字段有点相似,他们都是通过“点的方式”来访问,跟字段不同的是,这个属性相当是把字段封装起来了,并且给这个玩家血量字段加了一些简单的规则。

属性里的get和set

正如我举的玩家血量这个例子,我通过属性将玩家血量这个字段封装起来,并加了一些简单的逻辑,规定玩家血量范围和判断玩家死亡。这里提到要“简单逻辑”,不要在get和set里写太复杂的逻辑。如果是太复杂的逻辑,我们应该另外写一个专门的方法。所以说get和set就有点类似方法的作用,get就是读取方法,set即写入方法。

说到方法,也可以在get和set前加访问修饰符。此外我们灵活的写get和set,比如只有get

public int Health{

   get{
    return health;
   }
}

这样就是只读属性,而不能修改玩家血量的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值