zoukankan      html  css  js  c++  java
  • Unity

    一、Get/Set 的疑问

      通常来说,我们在 Unity 内声明一些属性,比如:

    1     private float hp;
    2 
    3     public int index;

      但是,偶尔可能会看到另外一些属性声明的方法,比如:

     1     public float Hp
     2     {
     3         get
     4         {
     5             return Hp;
     6         }
     7         set
     8         {
     9             Hp = value;
    10         }
    11     }

      所以我们就会有疑问:这个 get/set 是什么?为什么要这样写?有什么作用?

    二、Get/Set 的理解

      首先,这个 get 我们可以理解为 “”,如果你为一个属性声明了 get 方法,那么每当你调用该属性的时候,就会调用 get 内的方法,也就是我们看到的 get { return Num;}引用该属性后就会调用该属性的 get 方法,在该属性的 get 方法内返回了该属性本身,所以我们就可以拿到这个属性的值。

      然后是这个 set,我们可以理解为 “”,如果你为一个属性声明了 set 方法,那么每当你设置该属性的值的时候,就会调用 set 内的方法,也就是我们看到的 set { Hp = value;}这个 value 就是你在外部为该属性设置的值。比如:你在某个脚本里设置 Hp 的值,Hp = 100 ;那么设置的时候就会调用 set 方法,这个时候 value 就等于 100

    三、Get/Set 的基本用法

      使用前提:当要访问被 private 封装的属性的时候

      提供访问方式的原因:之所以用 private 封装,又对外提供访问方式(Get/Set),是因为可以在访问方式中加入逻辑判断等语句,对访问的数据进行操作,提高代码的健壮性。

      正常我们声明变量,有两种方式:private public,其实这两个也是有 get/set 的,只不过被隐藏了。他们都是可读可取的属性,当我们知道 get/set 的用法之后,就可以把一个属性设置为只读,或者是只写的属性,又或者是可读可写的属性。

     1     // 只读属性:只能读取该属性的值
     2     private float num_A
     3     {
     4         get
     5         {
     6             return num_A;
     7         }
     8     }
     9     // 只写属性:只能给改属性设置值
    10     private float num_B
    11     {
    12         set
    13         {
    14             num_B = value;
    15         }
    16     }
    17     // 可读可写的属性
    18     private float num_C
    19     {
    20         get
    21         {
    22             return num_C;
    23         }
    24         set
    25         {
    26             num_C = value;
    27         }
    28     }

    四、Get/Set 的具体用法

      通常来说,我们很少会直接设置属性的读写属性,通常会通过设置一个外部访问器来限制该属性的内容。比如:

     1     private float hp;
     2 
     3     public float Hp
     4     {
     5         get
     6         {
     7             return hp;
     8         }
     9         set
    10         {
    11             hp = value;
    12         }
    13     }

      在上面的代码中,Hp 就是 hp 的访问器,我们在外部需要获取或者设置 hp 值的时候,访问的是 Hp,获取 Hp 的值,get 中返回的是 hp,设置 Hp 的值,在 set 中将你设置的值 value 赋值给了 hp,这样就达到了访问 hp 的目的。

      那为什么要多次一举,不直接将 hp 设置为 public 呢,这是因为安全问题,我们可以通过修改 Hp 的限制条件,来限制最终 hp 的值,来达到一个安全的保障。

      比如,要让 hp 始终保持在 0~100 之间,你的 Hp 可以这样写:

     1     private float hp;
     2 
     3     public float Hp
     4     {
     5         get
     6         {
     7             return hp;
     8         }
     9         set
    10         {
    11             if (value > 100)
    12             {
    13                 value = 100;
    14             }
    15             else if(value < 0)
    16             {
    17                 value = 0;
    18             }
    19             hp = value;
    20         }
    21     }

      这样一来,不管在外部怎么设置 Hp 的值,hp 的数值永远都不会大于 100 或小于 0,访问器 Hp 就相当于一个滤网,将不合格的过滤掉,来保证后方的安全性。

  • 相关阅读:
    OSX中zsh新增环境变量
    新的开始 春光明媚
    tmux
    继承
    6
    Object类
    网页收藏
    画王八
    ES6 语法之import export
    ES6 语法 之 destructuring
  • 原文地址:https://www.cnblogs.com/ChenZiRong1999/p/13063993.html
Copyright © 2011-2022 走看看