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

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

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

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

Unity

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

Q&A

解決済

4回答

302閲覧

C#のthisキーワードについて

Aoi123

総合スコア8

C#

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

Unity

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

0グッド

0クリップ

投稿2018/09/08 07:38

MicroSoft Docsを見ると,「thisキーワードはクラスの現在のインスタンスを参照します」とあるのですがよくわかりません.
Teratailにあるthisはあるクラスのメンバーであることを表すという説明なら分かるのですが...
例えば下記のコードだとthis.GetComoponent・・・のthisはクラス名を指すと思うのですが(ImageMove) インスタンスを参照するとはどういうことなのでしょうか.
よろしくおねがいします.

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class ImageMove : MonoBehaviour { 6 7 // Use this for initialization 8 void Start () { 9 10 } 11 12 // Update is called once per frame 13 void Update () { 14 Transform tr = this.GetComponent<Transform>(); 15 Vector3 pos = tr.position; 16 pos.x = Random.Range(-2.0f, 2.0f); 17 pos.y = Random.Range(-2.0f, 2.0f); 18 tr.position = pos; 19 } 20} 21

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

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

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

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

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

guest

回答4

0

クラスを作ります。

C#

1public class Person 2{ 3 public string Name { get; set; } 4}

クラスができました。
では、インスタンスを作ります。

C#

1var alice = new Person(); 2alice.Name = "Alice"; 3 4var bob = new Person(); 5bob.Name = "Bob";

インスタンスが二つできました。

ここに alice と bob という二つのインスタンスがあります。
もともとは同じクラスから作られたものですので、new した時点では(参照以外で)区別はつきません。
しかし Name プロパティを設定することで二つのインスタンスは Name で区別できるようになりました。
各々が自分の Name を持った別個の存在です。
これがインスタンスです。

this キーワードは、クラスメンバーから自分のインスタンスを参照するのに使います。
bob から見れば this.Name は "Bob" であり、alice から見れば this.Name は "Alice" です。

投稿2018/09/08 07:51

編集2018/09/08 07:54
Zuishin

総合スコア28660

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

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

0

ベストアンサー

this が必要なケースを一つ。
下のコードでは 左辺の v は①、 右辺の v は②を指します。

cs

1class Hoge 2{ 3 int v; // ① 4 void Set(int v /* ② */) 5 { 6 this.v = v; 7 } 8}

投稿2018/09/12 03:45

gaya-K

総合スコア449

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

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

0

ほとんど、Zuishinさんの説明で良いと思うのですが、

this.GetComoponent・・・のthisはクラス名を指す

この場合、自身のメソッドを示すので、ほぼ同義です。大抵のメソッドの場合、インスタンス毎に異なる事はないので、区別する必要は無いでしょう。
ただし、"クラス名" で無く、自クラスですね。

クラスメンバの場合、多くは異なります。(一例が、Zuishinさんの例)
メソッドの場合も異なる事はありますが、クラス内で定義する限りは同じです。
(外部から、その定義を与える場合等)

投稿2018/09/09 10:46

pepperleaf

総合スコア6383

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

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

0

クラスとインスタンスでググりましょう。
そこら辺を教えているサイトはいっぱいありますので。

投稿2018/09/08 07:51

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問