- PR -

shared な変数の参照

投稿者投稿内容
武史
ベテラン
会議室デビュー日: 2007/09/21
投稿数: 71
投稿日時: 2008-12-24 10:55
vb .net 2005 のクラスで、shared な変数の参照方法で悩んでいます。

2003 の時は、Me を使って参照できたので、
ローカル変数との区別も見た目でつきやすく、
また、Me. と入れれば、インテリセンスも働くので助かっていました。

しかし、2005 だと、警告が出てしまうので、
Me での参照をやめるようにしているのですが、
ローカル変数との区別がつかないのと、インテリセンスが
使えないので、ちょっと面倒になっています。

なんか、いい方法とかありますか?
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2008-12-24 11:50
明確には書かれていませんが、
自クラス内のメソッドから自クラスの静的フィールドを参照する際の話でしょうか?
そうであるならば・・・
  • 静的プロパティにする。
  • メンバフィールドと静的フィールドでは命名ルールが違うからその違いで見分ける。
  • クラス名→ピリオドと入力したら「クラス名.静的フィールド」でインテリセンスが働くからクラス名を付ける。
海鶏
会議室デビュー日: 2007/02/01
投稿数: 3
投稿日時: 2008-12-24 12:04
つけないはどうでしょ
インテリセンスが必要なら『Ctrl+スペース』で呼び出せます

私は基本的に先頭文字を入力して『Ctrl+スペース』で入力しています
MeとかMyClassとかはそれが必要なときしか付けないです
※ローカル変数とかぶるとかクラス名なしで呼び出せるメソッドと同名の自クラスメソッドがありあいまいのときとか

今回は静的フィールドですから何かをつける場合クラス名を入力する必要がありますけど

[ メッセージ編集済み 編集者: 海鶏 編集日時 2008-12-24 13:17 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-12-24 14:23
引用:

武史さんの書き込み (2008-12-24 10:55) より:

2003 の時は、Me を使って参照できたので、ローカル変数との区別も見た目でつきやすく、また、Me. と入れれば、インテリセンスも働くので助かっていました。


念のため申し上げておきますが、Me キーワードは書かれている場所のクラスのインスタンスそのものを示しますので、これではインスタンス メンバと静的メンバの区別が逆につきにくくなります。 よって "見た目で区別がつきやすい" というのはコモンセンスではないでしょう。

引用:

しかし、2005 だと、警告が出てしまうので、Me での参照をやめるようにしているのですが、ローカル変数との区別がつかないのと、インテリセンスが使えないので、ちょっと面倒になっています。


どうしても区別を付けたいのであれば、クラス名を先頭につけるのが一般的だと思います。 Me キーワードに拘ってらっしゃるところから察するにキーワード チックにしたいのではないかと読み取りました。 もしキーワード チックにしたいのであれば

コード:

    Imports MyStatic = {そのクラスまでの完全修飾パス}


などとしておいて、

コード:

    MyStatic.HogeHoge


と書くことはできます。 これは単に名前空間のエイリアス インポートを使っているだけです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
武史
ベテラン
会議室デビュー日: 2007/09/21
投稿数: 71
投稿日時: 2008-12-24 16:12
みなさま、回答ありがとうございます。

説明が若干不足していたようでした。

あるクラス内のメソッドから、そのクラスの静的なメンバを
参照する場合の話です。

私の知っていた方法は、「何もつけない」か、「クラス名を先頭につける」
かの二つでした。

しかし、アクセス用のプロパティを作るか、Imports を使う方法などの
案をいただきまして、ありがとうございます。



クラス名を先頭につけるのもやってはいるのですが、vb .net 2003 の頃は、
クラス名なんて、そんなしょっちゅう書くものでもなかったので、
いくつかのクラスでは、えらく長いクラス名にしてしまっていました。

そのようなクラスを、vb .net 2005 に移行して、
その中に、静的メンバを頻繁に使うメソッドがあると、ソース中に、
えらく長いクラス名が連続して出てきてしまい、可読性がかなり落ちてしまいます。



何もつけないと、静的メンバと、インスタンスメンバは、区別が
つくようになりますが、変数の局所度は、

 ローカル変数 -> インスタンスメンバ -> 静的メンバ

という順になるかと思いますので、
静的メンバと、ローカル変数で、記法をそろえるよりは、
インスタンスメンバと、静的メンバで、記法をそろえる方が
よいかと思っています。


そのため、じゃんぬねっとさんが「なにもつけない」というのを
推奨されているように見える事が、意外に感じました。


逆に、2003 の頃は、「Me」 が、青い文字になるので、
ローカル変数との区別がつきやすく、「ローカル変数」か、「クラスのメンバ」か、
というのが一目で分かりやすくなります。
その方が、インスタンスメンバと、静的メンバの
区別がつく代わりに、ローカル変数と、静的メンバが同じような
色で表示されるより、重要でないかと思います。

特に、静的メンバと、インスタンスメンバの区別がついた方がいいのは
確かだと思いますが、私が触ったことのあるいくつかの言語の中では、
それらを区別する必要があったのは、vb .net 2005 が初めてで
したので、逆に不便に感じております。

もっとも、型宣言さえも、不便に感じる人もいるぐらいで、
価値観も変わっていくものだとは思いますが。



いずれにしても、Microsoft がそのような決断を下したぐらいですから、
「静的メンバと、インスタンスメンバの区別を明らかにした方がいい」というのが、
流れなんだろうと、感じてはおります。
ただ、なかなか理解ができません。


また、これを書いていて、自分の頭の中が整理できました。
自分の主旨にあうのは、アクセス用のプロパティな気がしてきました。

ありがとうございました。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-12-24 16:54
引用:

武史さんの書き込み (2008-12-24 16:12) より:

そのため、じゃんぬねっとさんが「なにもつけない」というのを
推奨されているように見える事が、意外に感じました。


推奨をした覚えはないですね。 私はクラス名をつけていることが多いです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
武史
ベテラン
会議室デビュー日: 2007/09/21
投稿数: 71
投稿日時: 2008-12-25 20:59
「どうしても区別を付けたいのであれば、」という表現から、

そのように思ってしまいました。

どうも、すいませんでした。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-12-25 21:12
ハンガリアン

静的であることを示すのは、アプリケーション ハンガリアンだと思います。

スキルアップ/キャリアアップ(JOB@IT)