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

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

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

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

Q&A

解決済

4回答

18379閲覧

【C#】this修飾子の明示的付与に関する是非

syogakusya

総合スコア67

C#

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

1グッド

3クリップ

投稿2016/09/06 02:56

編集2016/09/06 03:25

##知りたいこと
C#において、this修飾子にはクラスの現在のインスタンスを参照することを明示的に表す用法がありますが、このthisの是非に関する一般的な見解はどのようなものでしょうか。
・つけるべき
・つけるべきではない
・どちらでもよい
上記のいずれかになるかと思いますが、
それ以外でも構いません。
理由や根拠、場合によっては情報ソースも含めてください。
回答よろしくお願い致します。

##補足
Visual Studio 2015は、thisを明示的に付与すると「名前を簡略化できます。」というヒントを出すのですが、Resharperはデフォルトでthisをつけるよう警告を出すため、このような疑問に至りました。

mah👍を押しています

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

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

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

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

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

guest

回答4

0

ベストアンサー

個人の好みが強くでる話題のため、絶対的な正解は存在しないでしょう。

C#言語発祥の地、Microsoft社内では「常にthisを明記する」らしいです(真偽のほどは不明ですが)。MSDNフォーラムにあった C# Naming Convention and Guidelines regarding "this" keyword から引用します。

Microsoft's own internal standard is to always prefix with "this.", if that sways you in any way.

個人の好みはさておき、より重要なのはコードを共有する人が同じコーディング規約を使うことです。

Whatever your opinion, the important thing is that all people closely collaborating on a project use the same formatting standards, irrespective of what those standards are.


よそのQ&Aサイト(StackOverflow)にも同じ質問がありますが、かなり意見が割れていますね。

投稿2016/09/06 03:43

編集2016/09/06 03:52
yohhoy

総合スコア6187

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

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

yohhoy

2016/09/06 03:46

どうでもいいですが個人的には「this付けない派」です。Chironianさん回答にもありますが、C++だと付けないことが多い気がします。一方でJavaやC#は付ける派が多いような気もしますし、結局のところそれぞれの文化としか言えないのかもしれません。
syogakusya

2016/09/06 04:59

2つもソースを出していただいた上、個人的なコーディングスタイルについても言及していただけたので、ベストアンサーとさせて頂きます。 引用いただいたの記事に、内部でのスタンードは〜とありますし、マイクロソフトもどちらかの書き方を推奨しているわけではなさそうですね。 マイクロソフトのやり方に則りたいところですが、不要なところでは使わないスタイルでやっていこうと思います。 ありがとうございました。
guest

0

こんにちは。

メンバ変数と引数に同じ名前を付けた時、thisで判別しているケースを良く見かけますね。
そのためにはメンバ変数アクセス全てにthisを付けないと訳が判らなくなりやすいです。

私はこの用法には賛成できません。thisを付けそこなった時にエラーがでないし、見た目にも分かりやすいとは限らないですから。(引数と被るものだけthisを付けると引数なのかメンバなのか判りづらいです。)
文が長くなるのも嫌ですね。

私は必要な時以外thisは使いません。
引数とメンバ変数ではプリフィックスを変えてます。間違えたらエラーになるのでちょっと安心です。

「一般的な見解」かどうか把握していませんが、たぶん同様に感じている人は少なくないのでは?
ここは、C++の入門解説ですが「thisを使う必要がない場所でthisポインタを使う人はいません」とまで言い切ってます。


【追記】
なかなか検索で引っかからないのですが、こんな見解が見つかりました。私と同様な見解でした。

逆のthisを付ける積極的なメリットがなんなのか私も知りたいです。
文が長くなると言うデメリットをひっくり返すメリットがあるなら、参考にしたいですし。

投稿2016/09/06 03:29

編集2016/09/06 04:05
Chironian

総合スコア23272

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

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

syogakusya

2016/09/06 05:00

参考にさせていただきました。 つけない方でやっていこうと思います。 ありがとうございました。
guest

0

こんにちは。
this付けない派が多いようなので……自分は全てthis付ける派ですね。
正しくは、メンバー変数とプロパティへのアクセスには全てthis付け、メソッド呼び出しにはthis無しって感じです。

実際のところ、thisを付けることで動作が変わる場面が一部存在するくらいで、普段付けるか付けないかは規約が設けられている場合でなければ完全に趣味の話になるので、コーディングしているときの書き心地の良さ、後でコードを見直した時の見やすさなど、いろいろ書いてみてから自分で良いと思ったスタイルに統一すればいいのです。感覚がつかめないうちは、とりあえず全てにthisを付けてみるのもいいかもしれません。

ちなみに、自分がthis付ける派なのは、メンバー参照は出来る限り控えるべきだというコーディング思想の元で、参照箇所をより強調したいという意図があるからです。趣味です。

投稿2016/09/06 05:50

tamoto

総合スコア4103

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

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

syogakusya

2016/09/06 09:30

ご回答ありがとうございます。 インスタンスフィールドにはプリフィックスとしてアンダーバーをつけてしまいますし、私はthisなしでやっていこうと思います。 Visual Studioが省略できるthisに対してヒントを出すのが決定打になりました。 省略できる型パラメータなんかも省略しないと気持ちが悪いですし、thisも同じ扱いでいこうかなという感じです。
guest

0

私はthisはつけない派です。

インスタンス変数でもプロパティを使います。すると、C#の一般的は書き方では、プロパティは大文字で始まり、変数は小文字で始まるので、必要を感じないのです。何より、短いコードが好みです。

オブジェクト指向に慣れていない人に向けて書く際は、(特にコンストラクタでは)thisをつけるかもしれません。そちらのほうがインスタンス変数というのが判りやすいという点は否めません。

投稿2016/09/06 04:26

iwamoto_takaaki

総合スコア2883

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

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

syogakusya

2016/09/06 05:45

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.53%

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

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

質問する

関連した質問