none
定数の配列の書き方 RRS feed

  • 質問

  •  

    Code Snippet
        Private Const a As String = "a"
        Private Const b As String = "b"
        Private Const strArray() As String = New String() {a, b}

     

     

    は書けません。

     

    考えた結果

     

    Code Snippet

        Private Const a As String = "a"
        Private Const b As String = "b"
        Private Shared strArray() As String = New String() {a, b}


     

        Public Shared Function GetConst(ByVal i As Integer) As String
            Return (strArray(i))
        End Function

     

     

    こんな書き方はできましたが

    スマートな記述方法を教えてください。

     

    2008年6月11日 6:03

回答

  • いくみさん、こんにちは。

     

    定数の配列はありません。
    Shared はただの共有メンバです。

    定数に近づけるなら ReadOnly もつけてあげてください。

    2008年6月11日 11:11
  •  じゃんぬねっと さんからの引用

    定数に近づけるなら ReadOnly もつけてあげてください。

    「近づけるなら」の発言がポイントで、ReadOnlyをつけても配列の要素を置き換えることができます。

    (ReadOnlyはその変数が書き換えられないということであり、配列の中身に対しては効果がない)

     

    配列である以上は要素の書き換えが可能です。

    これを防ぐことは通常の配列では不可能です。

     

    故に、「定数の配列」というものは存在しない、実現できないこととなります。

     

    (配列みたいなものを作ることは可能ですが、本筋ではないので)

    2008年6月11日 15:27
    モデレータ
  • ReadOnlyCollection を使うっていうのもひとつの手かもしれませんね。

    http://msdn.microsoft.com/ja-jp/library/ms132474(VS.80).aspx

    2008年6月12日 3:26

すべての返信

  • いくみさん、こんにちは。

     

    定数の配列はありません。
    Shared はただの共有メンバです。

    定数に近づけるなら ReadOnly もつけてあげてください。

    2008年6月11日 11:11
  •  じゃんぬねっと さんからの引用

    定数に近づけるなら ReadOnly もつけてあげてください。

    「近づけるなら」の発言がポイントで、ReadOnlyをつけても配列の要素を置き換えることができます。

    (ReadOnlyはその変数が書き換えられないということであり、配列の中身に対しては効果がない)

     

    配列である以上は要素の書き換えが可能です。

    これを防ぐことは通常の配列では不可能です。

     

    故に、「定数の配列」というものは存在しない、実現できないこととなります。

     

    (配列みたいなものを作ることは可能ですが、本筋ではないので)

    2008年6月11日 15:27
    モデレータ
  • ReadOnlyCollection を使うっていうのもひとつの手かもしれませんね。

    http://msdn.microsoft.com/ja-jp/library/ms132474(VS.80).aspx

    2008年6月12日 3:26
  • >ReadOnlyCollection を使うっていうのもひとつの手かもしれませんね。

    ありがとうございます。

    環境を書いてなかったですが、VS2003の為 Framework1.1なんですよ(^^;

    早く追加された言語仕様を把握しないと時代遅れのままになってしまってます。

    こんなコレクションがあるのですね。覚えておきます。

    2008年6月16日 1:37
  • じゃんぬねっとさん
    Azulean さん

     

    ありがとうございます。

    >「近づけるなら」の発言がポイントで、ReadOnlyをつけても配列の要素を置き換えることができます。

    >(ReadOnlyはその変数が書き換えられないということであり、配列の中身に対しては効果がない)

     

    似たようなものにはなりそうですね。

     

    >故に、「定数の配列」というものは存在しない、実現できないこととなります。

    やはり出来ないのですね。

     

    特定のClassで使用する為に これをPrivateで実装してしまう

    似たような物で、代用する方向で考えます。

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

    Code Snippet
    Class HogeConst
         Private ReadOnly Shared strArray() As String = New String() {"a", "b"}
    Public ReadOnly Shared Property Hoge(Byval index As Integer) As String
    Get
      Return (strArray(index))
    End Get
    End Function
    End Class

     

     

     

    2008年6月16日 1:43