前提・実現したいこと
同じインスタンスを取得してるはずなのに、
staticメソッドだとエラーになってしまいます。
static内でも「インスタンス.インスタンスメンバ」にアクセスできる方法があれば教えていただけませんか?
また、それが不可な場合は、その理由について教えていただきたいです。
ご教示お願い致します。
該当のソースコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Sample : MonoBehaviour { 6 public int i = 20; 7}
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Sample2 : MonoBehaviour { 6 7 [SerializeField] 8 Sample sample; 9 10 void Start () { 11 Sample2.MyStatic(); 12 this.MyStatic2(); 13 } 14 15 static void MyStatic(){ 16 Debug.Log(sample.i); //エラーになる。 17 } 18 19 void MyStatic2(){ 20 Debug.Log(sample.i); //エラーにならない。 21 } 22}
補足情報(FW/ツールのバージョンなど)
Unity
追記質問。
「staticメソッド内部に記載された変数はstaticとして扱われる」
これをもっと掘り下げると、
「staticメソッド内部に記載されたローカル変数以外の変数やメソッドはstaticとして扱われる。」
で合っていますか?
また、下記コードのコメントも合っていますか?
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Sample3 { 6 public int i = 1; 7 static int j = 2; 8 9 public static void staticMethod(){ 10 //Debug.Log(i); //Sample3クラスのstaticなiを参照しようとして見つからないのでエラー。 11 Debug.Log(j); //出力:2。Sample3クラスのstaticなjを参照する。 12 MyMethod(); //出力:MyMethod。Sample3クラスのstaticなMyMethodを呼び出す。 13 int k = 3; //staticメソッド内で宣言した変数はローカル変数なのでstaticとして扱われない。 14 Debug.Log(k); //出力:3。 15 Sample3 s = new Sample3(); //staticメソッド内で生成した変数はローカル変数なのでstaticとして扱われない。 16 Debug.Log(s.i); //出力:1。 17 } 18 19 public static void MyMethod(){ 20 Debug.Log("MyMethod"); 21 } 22 23}
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class GameManager : MonoBehaviour { 6 7 void Start () { 8 Sample3.staticMethod(); 9 } 10}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/07/08 11:02
2018/07/08 12:40
退会済みユーザー
2018/07/08 13:50