- PR -

構造体にデータをセットしたい

1
投稿者投稿内容
damepg
大ベテラン
会議室デビュー日: 2003/03/19
投稿数: 229
お住まい・勤務地: 東京都内
投稿日時: 2003-04-24 18:28
VB.NETで構造体を作成しました。
このメンバーにデータをセットしたいのですが、下記でエラーが出て
データセットできません。どうしてでしょうか?
よきアドバイスをお願いします。

Private Structure strInfo
Private SiteID As String '店舗ID
Private Sales_Year As String '売上年
Private Sales_Month As String '売上月
Private Sales_Date As String '売上日
End Structure

Private Sub Btn_Update_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn_Update.Click

Dim DailyRep As strInfo
DailyRep.SiteID="aaa" 'ここがエラーとなる

End Sub
いし
常連さん
会議室デビュー日: 2003/04/15
投稿数: 27
投稿日時: 2003-04-24 18:57
いしです。

構造体のメンバーにPrivateをつけているからではないですか?
外からアクセスできなくなります。

#というか、構造体のメンバーにもそういう指定ができるんだ・・・
damepg
大ベテラン
会議室デビュー日: 2003/03/19
投稿数: 229
お住まい・勤務地: 東京都内
投稿日時: 2003-04-24 21:08
そうでした。
もっとよく見るべきでした。すみませんでした。


引用:

いしさんの書き込み (2003-04-24 18:57) より:
いしです。

構造体のメンバーにPrivateをつけているからではないですか?
外からアクセスできなくなります。

#というか、構造体のメンバーにもそういう指定ができるんだ・・・


damepg
大ベテラン
会議室デビュー日: 2003/03/19
投稿数: 229
お住まい・勤務地: 東京都内
投稿日時: 2003-04-25 10:45
下記の様に構造体のメンバーをpublicにすることにより解決しました。
しかし、メンバーBは初期設定で下記の様にしたいのですが、エラーと
なります。なぜでしょうか?

Public Structure AAA
Public StoreName As String
Public A() As Integer
Public B() As Integer = {0, 1, 2, 3, 4, 5, 6, 7}
Public C() As Integer
End Structure
いし
常連さん
会議室デビュー日: 2003/04/15
投稿数: 27
投稿日時: 2003-04-25 11:33
もっぱらC#ばかりを使っているので、VB.NETでどうなのか詳しくは
分かりませんが、おそらく構造体のメンバーは何も指定しなくても
Public扱いになりませんか?

そして、構造体のPublic/Privateと、メンバーのPublic/Privateは
分けて考えるべきだと思います。

以下のようでよくないですか?

コード:

Private Structure AAA 
    StoreName As String 
    A() As Integer 
    B() As Integer 
    C() As Integer 
End Structure 


初期値を与えたいのであれば、Classにして、コンストラクタで初
期化するというのが常套手段ではないでしょうか? でも、もしか
すると、Structureでもコンストラクタを書けるかもしれません。

いずれにしてもVB.NETを使ったことがないので、あんまりあてにな
りませんが・・・
Qoo
大ベテラン
会議室デビュー日: 2003/04/08
投稿数: 121
投稿日時: 2003-04-25 11:55
こんにちは。

ヘルプの「Structure ステートメント」のところでこんな記述がありますけど...

---------------------------------------------------------------------
構造体のデータ メンバの値を宣言の一部として初期化することはできません。
構造体のパラメータ化されたコンストラクタを使ってデータ メンバを初期化するか、
または構造体のインスタンスを作成した後にメンバに値を割り当てる必要があります。
---------------------------------------------------------------------
Izumi, Y.
ベテラン
会議室デビュー日: 2002/03/19
投稿数: 77
お住まい・勤務地: 東京
投稿日時: 2003-04-27 19:14
これはちょっと強引かな?
構文が間違っているかもしれないので、そのときは適当に修正してください。
コード:
Public Structure AAA 
  Private mB() As Integer
  Public Property B As Integer()
    Get
      If IsNothing(mB) Then
        mB = New Integer() { 0, 1, 2, 3, 4, 5, 6, 7 }
      End If
      Return mB
    End Get
    Set
      mB = Value
    End Set
  End Property
End Structure 


いずれにせよ、フィールドを Public にして直接アクセスできるようにするのは、
オブジェクト指向としてはあまりよくないみたいです。そのため、VB.NET や C#
の場合はプロパティを介してアクセスするようにします。
(Java など、プロパティという概念がない言語ではメソッドを利用します)

引用:

もっぱらC#ばかりを使っているので、VB.NETでどうなのか詳しくは
分かりませんが、おそらく構造体のメンバーは何も指定しなくても
Public扱いになりませんか?


確か VB.NET では何もつけないとクラスでも全部 Public になったような…

引用:

でも、もしかすると、Structureでもコンストラクタを書けるかもしれません。


パラメータのないコンストラクタは書けません。パラメータのあるものであれば書けます。
関係ないですが C++ の struct でも書けます。
1

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