tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルクラス名について
記事No6744
投稿日: 2007/12/28(Fri) 13:12
投稿者さとも
はじめて書き込みをさせていただいています。

私はこれまで人から教えてもらったことから、クラス名は、はじめに"cls"をつけていました(例えば、"clsCar")。
しかし、"cls"をつけるのは一般的ではないと最近思い、"cls"をつけないでクラス名を宣言することにしています。そうすると、当然のことながら、クラス名とオブジェクト名が同じになって、エラーが出ると思うのですが、こういう場合は皆さんどのようにして解決されていますか?

よろしくお願いします。

[ツリー表示へ]
タイトルRe: クラス名について
記事No6745
投稿日: 2007/12/28(Fri) 14:02
投稿者よねKEN
> 私はこれまで人から教えてもらったことから、クラス名は、はじめに"cls"をつけていました(例えば、"clsCar")。

VB6以前は一応は標準的な名前付けの方法だったと思います。
VB.net(VB.net2002(7.0)、2003(7.1)、VB2005(8.0)、VB2008(9.0))になってからは、
プレフィックスを付けないのが一般的になっていますね。

> しかし、"cls"をつけるのは一般的ではないと最近思い、
> "cls"をつけないでクラス名を宣言することにしています。
> そうすると、当然のことながら、クラス名とオブジェクト名が同じになって、
>  エラーが出ると思うのですが、こういう場合は皆さんどのようにして解決されていますか?

私の場合ですが、ローカル変数とインスタンス変数/クラス変数とで扱いを変えます。

○ローカル変数の場合
System.IO.StreamReaderというファイル操作をするときにはよく使うクラスを例にとると
このクラスの場合、たいていは1メソッドの中でのみ使うローカル変数を宣言して使うので、
例えば以下のように宣言します。

例1)
Dim sr As StreamReader

クラスの頭文字を取っただけの名前です。
短い範囲でしか変数srを使わないので、それで特に困ることがありません。

ただし、ローカル変数でも重要なものは他の変数とはっきり区別できる
意味のある名前を付けますので、必ず上記のような略称を使うという意味ではありません。

○インスタンス変数/クラス変数
インスタンス変数はプロパティのために用意されることが多いと思いますが、
その場合は、以下のように宣言します。

例2)
' インスタンス変数の宣言
Private m_Count As Integer


' プロパティの宣言
Public ReadOnly Property Count() As Integer
   Get
       m_Count
   End Get
End Property

プロパティの名前と合わせた上でプレフィックスとして"m_"を付けるスタイルです。
つまり、"m_"を付けるという点とクラス名に関わらずその意味に即した形で命名するということです。
特に意味づけが不要な場合はクラス名をそのまま使うこともありますが、
この場合も"m_"を付けているので問題ありません。

あまりやりませんが、Publicな変数を宣言する場合は、クラス名をそのまま変数名にすることもあります。

例3)
Public Color As Color

>クラス名とオブジェクト名が同じになって、エラーが出ると思うのですが

お勧めはしませんが、文法上も動作上も特に問題はありませんよ。

[ツリー表示へ]
タイトルRe^2: クラス名について
記事No6747
投稿日: 2007/12/28(Fri) 15:27
投稿者さとも
お返事ありがとうございます。

> VB6以前は一応は標準的な名前付けの方法だったと思います。
> VB.net(VB.net2002(7.0)、2003(7.1)、VB2005(8.0)、VB2008(9.0))になってからは、
> プレフィックスを付けないのが一般的になっていますね。

"cls"とプレフィックスをつける方法は、以前は一応標準だったのですね。
この方法を教えてくれた人は、どこでこのルールを知ったのだろうと、ずっと不思議でした。
他に、インスタンス変数に"obj"をつけるというようなことを教えてもらったのですが、現在はまったく使っていません。


> 例2)
> ' インスタンス変数の宣言
> Private m_Count As Integer

この場合、私は"c_Count"としています。自分のやり方はあながち間違いではなかっのだと思って、少しほっとしています。


> 例3)
> Public Color As Color
>
> >クラス名とオブジェクト名が同じになって、エラーが出ると思うのですが
>
> お勧めはしませんが、文法上も動作上も特に問題はありませんよ。

私の場合、なぜか「'Color'は型です。有効な式ではありません。」というエラーが出てしまいました。
実装したPubliメソッドなどもインテリセンスに表示されてこなかったりという具合です。
私はなにかすごく重要な見落としをして、エラーを出しているのかもしれませんが。

[ツリー表示へ]
タイトルRe^3: クラス名について
記事No6748
投稿日: 2007/12/28(Fri) 16:48
投稿者るしぇ
>私の場合、なぜか「'Color'は型です。有効な式ではありません。」というエラーが出てしまいました。
ヘルプにエラーについての説明がありますが、『式』が必要な場所に型を書いている場合に
出るエラーです。文法のエラーですので、クラス名は関係ないはずです。(エラー内容が違います)

もう一度コードを確認してください。
> Public Color As Color
もしくは上のコードをコピペして貼り付けてください。
それでも同様のエラー表示になる場合は、新規プロジェクトで試してみてください。

また、
> Public m_Color As System.Drawing.Color
上のコードを貼り付けた時に、どうなりますか?

[ツリー表示へ]
タイトルRe^4: クラス名について
記事No6749
投稿日: 2007/12/28(Fri) 18:22
投稿者さとも
お返事ありがとうございます。

> もう一度コードを確認してください。
> > Public Color As Color
> もしくは上のコードをコピペして貼り付けてください。
> それでも同様のエラー表示になる場合は、新規プロジェクトで試してみてください。
>
> また、
> > Public m_Color As System.Drawing.Color
> 上のコードを貼り付けた時に、どうなりますか?

るしぇさんのおっしゃる通り、上記のコードはともにエラーとなりませんでした。
つまり、クラス名とインスタンス名は同じでも大丈夫なのですね。勉強になりました。

エラーとなったプロジェクトには、他のコードが含まれていますので、別の要素がエラーに
関わっているのかもしれません(たとえば、コード訂正のために思い切って行った
「一括置換」がまずかったなど)

ここからは自力で解決しようかと思っています。

本当にありがとうございました。

[ツリー表示へ]