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

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

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

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

Q&A

2回答

1091閲覧

静的でもないのにインスタンス不要な理由

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

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

0グッド

0クリップ

投稿2021/10/06 10:10

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour
{
// Start is called before the first frame update
void say_Hello()
{
Debug.Log("Hello!!!");
}
void Start()
{
say_Hello();
}
}

startメソッドの中で、testクラスのインスタンスを持ってくる必要なく、エラーにもならずきちんとHelloが表示されました。静的ですらないのに..。(Unity初心者)

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

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

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

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

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

dodox86

2021/10/06 10:20

> startメソッドの中で、testクラスのインスタンスを持ってくる必要なく、 いやいや、Start()メソッド自体がTestクラスのインスタンスメソッドですが。
退会済みユーザー

退会済みユーザー

2021/10/06 10:30

StartメソッドがTestクラスのインスタンスに何故なっているのか教えていただけませんか?
Zuishin

2021/10/06 10:52

自分でそう書いたんでしょう。 アタッチされたオブジェクトのインスタンスを作っているのは Unity です。
退会済みユーザー

退会済みユーザー

2021/10/06 12:05

自分で書いたわけではなく、本に書書かれていたものに対して疑問を持って投稿しました。答える気がないのであれば、迷惑ですのでコメントを控えていただけると幸いです。
Zuishin

2021/10/06 12:06

逆に本も読まず質問を投げ散らかすなら迷惑なので控えてもらえませんか? そのくらい書いてあるでしょ。
Zuishin

2021/10/06 12:15

ああ、過去質問の言葉遣いを見てわかった。 お前か。 迷惑だからアカウント名変えるなよ。
Zuishin

2021/10/07 00:39

またアカウント変えやがった。
BeatStar

2021/10/07 02:50

結局、返信すら無しで退会か
guest

回答2

0

エラーにもならずきちんとHelloが表示されました。

なぜならばC#の言語仕様では、クラス内で呼び出されるインスタンスメソッドはthisで参照されるインスタンスのメソッドとして動作するように決まっているからです。

say_Hello();の呼び出しはthis.say_Hello();と同じ意味であり、このthisはTestクラスのインスタンスを意味します。そのためsay_Helloメソッド呼び出しは成功します。

Static and instance methods

投稿2021/10/06 11:33

ku__ra__ge

総合スコア4524

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

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

0

初心者のうちは、このMonoBehaviourのオブジェクトは特殊なものだと考えた方が良さそうです。

厳密にはUnityが管理しています。
イメージ的にはUnityのエンジンが、起動時に、MonoBehaviourを継承したクラス、今回だとTestクラスのオブジェクトを自身が生成して保持。
そしてStartメソッドを動かしている感じだと思います。

厳密には違うと思いますが。

投稿2021/10/06 11:18

BeatStar

総合スコア4962

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問