確認したいこと
プロパティを定義した配列型のメンバ変数を設定する。
このとき外部から、プロパティに対して添字を指定してget/setすると、その添字に対応したメンバ変数の値にアクセスできるのか確認してみた。
つまりメンバ変数_value
とプロパティValue[]
を定義したときに、
Value[n] = 1
と代入すると_value[n]
にも 1 が代入されるのか。
確認用コード
Unityで確認したため、Unityの機能色々使ってます。
ListTest.cs
内のflag
について
・flag
をtrueにすると、Data.SetValue
やData.GetValue
を用いてData._value
に直接get/setする。
・flag
をfalseにすると、プロパティに添字を指定してData._value
を行う。
前者では添字を指定したData._value
にアクセスしていることに対し、後者ではData.Value
に添字を指定してData._value
にアクセスする。
前者はアクセス可能なことは想像できるが、後者だとプロパティ側で指定した添字に対応するData._value
にアクセスしてくれるか分からないので検証。
Data.cs
public class Data
{
private int _num = 2;
private int[] _value;
public int[] Value
{
set { _value = value; }
get { return _value; }
}
public Data()
{
_value = new int[_num];
}
public void SetValue(int index, int recievedValue)
{
_value[index] = recievedValue;
}
public int GetValue(int index)
{
return _value[index];
}
}
ListTest.cs
public class ListTest: MonoBehaviour
{
[SerializeField]
private bool flag = false;
private Data _data;
private int[] _tmpValue;
void Start()
{
_data = new Data();
_tmpValue = new []{1,2};
}
void Update()
{
for (int i = 0; i < _data.Value.Length; i++)
{
SetForce(i, _tmpValue[i]);
if(!flag) Debug.Log(_data.Value[i]);
else Debug.Log(_data.GetValue(i));
}
}
void SetForce(int index, int value)
{
if(!flag) _data.Value[index] = value;
else _data.SetValue(index, value);
}
}
結果
プロパティ側で添字を指定した場合でもData._value
にアクセスできることを確認。
// 結果 (flagはfalse)
1
UnityEngine.Debug:Log (object)
ListTest:Update () (at Assets/Scripts/ListTest.cs:49)
2
UnityEngine.Debug:Log (object)
ListTest:Update () (at Assets/Scripts/ListTest.cs:49)