【C#中级教程(Unity官方)】创建属性

我们经常需要通过某种方法,从位于类之外的代码访问这个类的成员变量,一种方法是公开变量,然后直接访问。虽然这个方法已经够用,但是还有更好的方法,那就是使用属性

如何创建属性

属性本身可以当作变量,并且可以封装成成员变量,我们也称之为字段,通过这种封装,我们可以更好地控制字段的访问时间和访问方式。

假设有一个名为experience的字段,该字段位于Player类中

public class Player
{
    
    
	private int experience;
}

我们要想办法让位于该类之外的代码能够访问这个字段,我们要创建一个属性。属性语法的工作原理如下:

  1. 首先指定**访问修饰符****
  2. 然后指定类型
  3. 后跟属性名(建议将属性命名为以大写字母开头的字段名
  4. 在属性名后输入一对花括号,就像函数一样
  5. 在括号内输入属性的访问器(一个属性可以有两个访问器get(引用属性)和set分配属性))
  6. get访问器内,返回所封装的字段;在set访问其中,使用关键字value给字段赋值
public int Experience
{
    
    
    get
    {
    
    
        return experience;
    }
    set
    {
    
    
        experience = value;
    }
}

以上就是实现属性所需操作。

现在打开另一个脚本。我们可以使用属性代替字段,就像平时一样。

这个时候你可能会问:既然可以使用公共访问修饰符作为变量开头,为什么还要用属性?

使用属性可以执行两项公共变量无法实现的操作:

  • 通过省略getset,可以有效地将字段设置为只读或只写。如果字段是私有的,那么没有get访问器就无法获取该字段,没有set访问器就无法写入该字段

  • 还可以将访问器视为函数,这表示你可以在访问器内部运行其他代码或调用其他函数

public int Experience
{
    
    
    get
    {
    
    
        //Some other code
        return experience;
    }
    set
    {
    
    
        //Some other code
        experience = value;
    }
}

​ 顺着这一思路继续想,可以推断出使用set访问器启动协同程序。

属性特点

字段封装不需要是直接的

设想一个游戏玩家获得经验,每获得1000经验值即可升级。如果有一个字段代表经验值,就可以用属性来代表玩家的等级

public int Level
{
    
    
	get
    {
    
    
        return experience / 1000;
	}
}

等级属性的get访问器,可以返回experience字段除以1000得到的值,而不是返回真实的经验值,这样一来,它会返回数字等级,而不是玩家拥有的经验数量。

此外,等级属性可以有set访问器,用于接收等级和计算玩家所获得的经验数量,并将值存储在experience字段中。

public int Level
{
    
    
	get
    {
    
    
        return experience / 1000;
	}
    set
    {
    
    
        experience = value * 1000;
	}
}
属性可以被自动实现

要创建自动实现的属性,可以使用简写语法。在这种语法中getset访问器后面仅跟一个分号。

public int Heath{
    
    get;set;}

通过这种方式创建的属性行为与字段完全相同,区别在于可以通过移除getset访问器,使属性只读或只写。

通过Visual Studio可以使用代码段快速创建属性:

输入prop然后按Tab键,便会自动插入代码段
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_64072619/article/details/131624450