質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

782閲覧

フィールドでのメソッドの呼び出しやUnityでの実行順序について

退会済みユーザー

退会済みユーザー

総合スコア0

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2021/07/20 07:56

質問と試したこと

フィールドでのメソッド呼び出しやUnityでの実行順序についての質問です。

・質問1。
フィールドでメソッドを呼び出せることを知らなかったのですが、これはいつから(C#のどのバージョン)から、
そのような仕様になったのでしょうか?(C#1.0とかだいぶ昔からですか?)

・質問2。
また、フィールドでのメソッド呼び出しはいつ行われているのでしょうか?
Unityでのイベント関数の実行順序を見てみると、
最初に呼び出されるメソッドがAwakeみたいですが、試したところ、Awakeよりも前に呼び出されているような挙動に見えました。
フィールドでのメソッド呼び出しは、Awakeよりも前に行われているという認識で合っていますか?

C#

1public class ScriptTest : MonoBehaviour 2{ 3 int i = sum(2,3); 4 5 static int sum(int a, int b){ 6 return a+b; 7 } 8 9 void Awake() 10 { 11 Debug.Log(i); 12 } 13}

 上記において、Awakeのログでsum関数の出力を確認しました。

・質問3。
staticでないメソッドはフィールドで呼び出せませんか?
呼び出す方法があればご教示お願いいたします。

C#

1public class ScriptTest : MonoBehaviour 2{ 3 int i = sum(2,3); 4 5 int sum(int a, int b){ 6 return a+b; 7 } 8 9 void Awake() 10 { 11 Debug.Log(i); 12 } 13}
Assets\ScriptTest.cs(7,13): error CS0236: A field initializer cannot reference the non-static field, method, or property 'ScriptTest.sum(int, int)'

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

  1. 1.0から出来たと思います (少なくともC#2.0の頃には出来たはずです)
  2. 今回の場合、ScriptTestというインスタンスが作成される時にはすでに呼ばれています

厳密なのは以下のBlogでも見てください
https://u-1roh.hatenadiary.org/entry/20060902/1157172959
3. メンバー変数の初期化はコンストラクタを用います

csharp

1 2public class ScriptTest : MonoBehaviour 3{ 4 int i; 5 6 ScriptTest(){ 7 i = sum(2,3); 8 } 9} 10

投稿2021/07/20 11:47

izmktr

総合スコア2856

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/07/20 13:07

ご回答ありがとうございます。 質問3に関して、念のため確認させていただきたいのですが、 staticでないメソッドは、フィールドでは呼び出せないという認識で合っていますか?
izmktr

2021/07/21 01:21

そもそも、sumでエラーになるのは、thisが存在しないからです sumがstaticであれば、thisを必要としないので呼び出せます
Zuishin

2021/07/21 01:25

リンク先は静的フィールドの話ですが、この質問はインスタンスフィールドなので、話が違います。
退会済みユーザー

退会済みユーザー

2021/07/21 10:33

ご回答ありがとうございました。 「staticでないメソッドはフィールドで呼び出せない」と理解することにしました。 あと、質問する側の立場でこのようなことを言うのは申し訳ないとは思うのですが、 「~認識で合っていますか?」という質問に対して、 「合っています」もしくは「違います」のようにYes,Noで明言してご回答いただけるとわかりやすいです。 他の方がこの質問トピックを見た際も、そのように書かれているとわかりやすいかと思います。 私自身も回答者側に回った際は、その点を心がけたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問