• 締切済み

定数を構造体で・・・

こんにちわ。 ちょっと疑問に思いまして、お聞きしたいのですが。 VB.net2005を使用しています。 定数宣言を構造体で宣言するのは 考え方として変でしょうか? たとえば public structure TEST   public dmy as byte '←エラー解除のダミー   public const CNUM as integer = 1 end structure public sub testM()   Lbl1.Text = TEST.CNUM end sub のように作り 定数宣言が多くあった場合に いちいちページ切り替え等をしなくても TEST.と打った後にすぐに一覧がでてくるので 便利だと思ったのですが。 この考え方はやっぱりへんなんですかね? もともとC言語出身なもので、 色々試していて疑問におもったのです。 もっとほかによい方法あるよ!ってのが あればお教えください。 お暇なときでよいので回答お願い致します^^   

みんなの回答

回答No.3

私なら構造体よりクラスを使います。以下のような感じで。 Public NotInheritable Class TEST Public Const CNUM As Integer = 1 End Class 構造体の場合、 public dmy as byte というメンバを持たせてますね。 きっと質問者さんも不本意ながら、何も無いとエラーになるので仕方なく入れているのではないかとお察しします。 クラスなら、上のように必要な定数だけでも大丈夫です(^^) また、Enumと違いString型でも使えますよ。 あと気になったので。 No1さんへの回答への補足で、 >VS VB.net2005ではTEST.と打った時点では >ENUMの場合出てこないですね。 とありますが、TEST.と打った時点で出ませんか? 私は出ましたが。

  • isomaru
  • ベストアンサー率33% (1/3)
回答No.2

はじめまして この質問は、定数か構造体どちらの質問でしょうか? 定数ならEnumで解決できると思います 構造体は以下のようにすれば使用できます。 ●標準モジュール Option Explicit '(1)構造体の宣言 '(宣言なので定数は指定できません) Public Type TEST cc As Byte CNUM As Integer End Type '(2)構造体の実装 'Cでも同じですね Public ttest As TEST ●Formのコード Option Explicit Private Sub TestM() Text1.Text = ttest.CNUM End Sub Private Sub Form_Load() '(3)CNUMの初期化 ttest.CNUM = 1 End Sub 構造体は非常に便利なのでよく使用します (例えば関数の戻り値等) が、VBではCのような初期化が出来ないのが難点ですね。

kspring
質問者

補足

ご返答有難うございます。 定数と構造体の両方の質問です。 isomaruさんの場合VB.net2005ではないように思えます。 私自身、VB.net2005しか使ったこと無いので いまいち判りませんが。 「type」はサポートされていません。と出ます。 実際に私の質問のコードを書いた場合 構造体の宣言部分ですが・・・・なぜか定数を定義することが出来。 かつ、正常に動きます・・・ 構造体の概念的には、たしかにずれてるのですが・・・ OBJ思考のデータを中心とした考えの場合、ずれてないようにも 思えます。 あくまで、人それぞれの考え方もあると思うので どうなのかな?程度に質問しました・・・ 判りにくい文章で、申し訳ございません。

  • unamana19
  • ベストアンサー率62% (56/89)
回答No.1

Enum(列挙型)があるので、そちらで実現できます。 Public Enum TEST As Integer   CNUM = 1 End Enum

kspring
質問者

補足

ご回答有難うございます。 返答が遅くなりすみません。 VS VB.net2005ではTEST.と打った時点では ENUMの場合出てこないですね。 質問の内容がわかりにくくすみません。 内容としては、定数を構造体で持つことで 開発時のストレスを軽減するために、このような 方法で行ってる人はいるのかな? 程度でした・・・ 実際に定数を管理する上で、ある程度名前を記憶していますが 一部忘れることが多々あり、上記のような方法を思いついたのです。 VB.net2005ではエラーもなく、問題なく動作していたので。 あとENUMだとString型は持てないので、上記の方法はどうなのかな? というのもありました。(これは情報不足でした。)

関連するQ&A

専門家に質問してみよう