• ベストアンサー

「共有メンバにアクセスするインスタンス変数」はどんなコードですか?なぜ

「共有メンバにアクセスするインスタンス変数」はどんなコードですか?なぜ警告が出るのですか?(VB.NET 2005)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

警告が出る理由は、「分かりづらくなる」 です。 クラスの共有メンバを呼び出す場合は、そのクラスから作成したインスタンスの変数名を通じて行うのではなく、クラス名を通じて行ったほうが良いということです。 Dim myDateTime1 As DateTime myDateTime1 = DateTime.Now() 日付時刻を格納するために DateTime クラスのインスタンス変数 myDateTime1 を作成し、現在の日時を入れたいと思います。 現在の日時は DateTime クラスの共有メンバである Now 関数で取得できるので、DateTime.Now() の結果を myDateTime1 変数に入れています。 このケース DateTime.Now() は DateTime というクラス名を通じて DateTime クラスの共有メンバである Now 関数にアクセスしています。 (実際には Now は関数というよりは読み取り専用のプロパティーですが、値を返すという意味で関数とします) Dim myDateTime2 As DateTime myDateTime2 = myDateTime1.Now() DateTime 型のインスタンス変数をもう一つ作ります。 この myDateTime2 変数にも現在の日時を入れたいと思います。 このケースでは先に作成した myDateTime1 変数を通じて Now() 関数にアクセスしています。 このコードでは、Now 関数がインスタンスごとの違いの影響を受けてしまうように読めてしまいますが、DateTime1 の Now 関数も DateTime2 の Now 関数も機能はまったく同じ。なぜならインスタンスに関係なく、DateTime クラスが持つ共有メンバだからです。 なので myDateTime1.Now() とか myDateTime2.Now() とか書くのではなく、DateTime.Now() というようにクラス名を通じて書くべきである。 という警告です。

trap1130
質問者

お礼

>警告が出る理由は、「分かりづらくなる」 です。 >このコードでは、Now 関数がインスタンスごとの違いの影響を受けてしまうように読めてしまいますが、DateTime1 の Now 関数も DateTime2 の Now 関数も機能はまったく同じ。なぜならインスタンスに関係なく、DateTime クラスが持つ共有メンバだからです。 なるほど。 詳しい解説をありがとうございました。 勉強になりました。

関連するQ&A