using UnityEngine; using System.Collections; public class Skill { public string name; public int power; public string ToString() { return "[" + name + " (" + power + ")]"; } } public class Person { public string name; // 名前. public int age; // 年齢. public Skill skill; // スキル, public void Say() { Debug.Log(name + " (" + age + "): " + skill.ToString()); } } public class RefTester : MonoBehaviour { void Start () { Person p1 = new Person(); p1.name = "YAMADA ICHIRO"; p1.age = 11; p1.skill = new Skill{name="MATH", power=10}; NonRefMethodAndChangeSkill(p1); p1.Say(); // => HENKO (100): [MIRACLE (200)] Person p2 = new Person(); p2.name = "YAMADA JIRO"; p2.age = 21; p2.skill = new Skill{name="ENGLISH", power=20}; RefMethodAndChangeSkill(ref p2); p2.Say(); // => HENKO (100): [MIRACLE (200)] } void NonRefMethodAndChangeSkill(Person p) { p.name = "HENKO"; p.age = 100; ChangeSkill(p.skill); // 更にこっちも可能で同じ(refの更にref) // RefChangeSkill(ref p.skill); } void RefMethodAndChangeSkill(ref Person p) { p.name = "HENKO"; p.age = 100; ChangeSkill(p.skill); // 更にこっちも可能で同じ(refの更にref) // RefChangeSkill(ref p.skill); } void ChangeSkill(Skill s) { s.name = "MIRACLE"; s.power = 200; } // ここもやってOK void RefChangeSkill(ref Skill s) { s.name = "MIRACLE"; s.power = 200; } }
同じ結果になった。 オブジェクトの中身のプロパティを変えても同じ。