万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

  • ・資産運用おすすめ
    10万円は1000円くらい利益
    資産運用ブログ アセマネ
    • ・寄付お願いします
      YENTEN:YYzNPzdsZWqr5THWAdMrKDj7GT8ietDc2W
      BitZenny:ZfpUbVya8MWQkjjGJMjA7P9pPkqaLnwPWH
      c0ban:8KG95GXdEquNpPW8xJAJf7nn5kbimQ5wj1
      Skycoin:KMqcn7x8REwwzMHPi9fV9fbNwdofYAWKRo

    参照実験 Unity C#

    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;
        }
    }

    同じ結果になった。 オブジェクトの中身のプロパティを変えても同じ。