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

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

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

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

コンストラクタ

オブジェクト指向言語において、オブジェクトを生成時に呼び出され、データの初期化などを行なう関数・メソッドのことである。

Q&A

解決済

3回答

522閲覧

【C#】コンストラクタについて

testsome

総合スコア20

C#

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

コンストラクタ

オブジェクト指向言語において、オブジェクトを生成時に呼び出され、データの初期化などを行なう関数・メソッドのことである。

0グッド

2クリップ

投稿2017/08/04 10:36

編集2017/08/04 10:37

コンストラクタを勉強していたところ、参考書にthisについて、「メソッドが呼び出されたとき、そのメソッドではそのオブジェクトへの参照であるthisが利用できます」と記載がありました。

① thisはコンストラクタを記述するときに必ずしもつける必要はないのでしょうか。
② ①の場合、thisはどういう場合に使う必要があるのでしょうか。
③ 下記のコードでは、thisを記述してもしなくても両方ちゃんと実行できるのですが、この場合はあってもなくてもいい、ということでしょうか。

質問事項が抽象的で申し訳ありませんが、分かりましたら教えてください。

C#

1using System; 2 3namespace test 4{ 5 class constract1 6 { 7 private int num1; 8 private int num2; 9 public constract1(int i1, int i2) 10 { 11 num1 = i1; 12 num2 = i2; 13 //this.num1 = i1; 14 //this.num2 = i2; 15 Console.WriteLine("変数num1、num2に値をセットしました。"); 16 } 17 18 public void keisan() 19 { 20 Console.WriteLine("計算式:"); 21 Console.WriteLine("{0} + {1} = {2}", num1, num2, num1 + num2); 22 } 23 } 24 class Program 25 { 26 static void Main(string[] args) 27 { 28 constract1 c1 = new constract1(30, 10); 29 Console.WriteLine(); 30 c1.keisan(); 31 } 32 } 33} 34

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

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

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

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

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

guest

回答3

0

class constract1 { private int num1; private int num2; public constract1(int num1, int num2) { this.num1 = num1; this.num2 = num2; Console.WriteLine("変数num1、num2に値をセットしました。"); }

こういうとき、絶対使う。名前が同じだとどちらかわからないので。
それ以外は「好み」。コーディング規約に従ってくれというくらいの話。

投稿2017/08/04 10:50

編集2017/08/04 10:52
kiichi54321

総合スコア1984

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

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

testsome

2017/08/07 03:16

回答ありがとうございます。参考にさせていただきます。
guest

0

ベストアンサー

VS17で編集しているならコンストラクタの引数とフィールド変数が同じ場合、thisキーワードを使用せずに指定すると警告が発せられます。(CS1717:同じ変数に割り当てられました)
そのため、左辺にthisを使用して左辺の変数がクラス内のフィールド変数であることを明示的にしなければいけません。

また、thisが不要な際は左側に電球が表示され、「this修飾子を削除します。」というアドバイスが現れます。(IDE0003)

thisをつける必要がないときでもthisを付加するかどうかは……コーディング規約によるということで。

投稿2017/08/05 12:36

Argent

総合スコア59

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

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

testsome

2017/08/07 03:15

回答ありがとうございます。参考にさせていただきます。
guest

0

コンストラクタを勉強していたところ、、参考書にthisについて、「メソッドが呼び出されたとき、そのメソッドではそのオブジェクトへの参照であるthisが利用できます」と記載がありました。

その this というのは、

public constract1(int i1, int i2) { this.num1 = i1; this.num2 = i2; Console.WriteLine("変数num1、num2に値をセットしました。"); }

の this ではなく、あるクラスの内部から他のコンストラクタを呼び出す機能を提供する this のこと、すなわち以下の記事の this の話ではないのですか?

コンストラクターの使用 (C# プログラミング ガイド)
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/classes-and-structs/using-constructors

投稿2017/08/04 11:37

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2017/08/05 12:12

誰、マイナス評価を付けた人? どういう理由ですか? 表題「コンストラクタについて」も質問の内容もコンストラクタの話ということで、参考書に書いてあったのはコンストラクタで使う base, this の話かもしれないと思ったのですが。 this.num1 = i1; の this はコンストラクタに限った話ではないはず。
testsome

2017/08/07 03:28

回答ありがとうございます。コンストラクタのページの次のページにthisについて説明があったため、「コンストラクタ=thisを付ける」と思い込んだのかもしれません。参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問