VB10のプロパティ定義

投稿者: Tomotoshi Sugishita 2008年11月4日 23:31

MVP for VB の樋口さんのブログのエントリーを見ていて・・・

VB10 では、C#3.0同様、暗黙のアクセッサの自動定義により、プロパティ定義がシンプルにかけるようになる予定だけど、ReadOnly や WriteOnly などのキーワードをもつプロパティ(Setter もしくは Getter しか持たないプロパティ)は省略できず従来通りの書き方になるようです。
何気に、ReadOnly でも以下のように書けても良いんじゃない?なんて思ってたけど、

Public ReadOnly Property ID As Integer

よくよく考えてみると、こうした場合、そもそもこのプロパティの値を設定する手段がないわけね。
もともとは、ReadOnlyだと、外部への公開時にはクラス内部なりに、独自の(Privateな)アクセッサを使って値を設定する場合がほとんどなわけで、そういった意味では、省略された記述ではその手段を断ってしまうということで、(WriteOnlyも同様)「意味なし」ということですね。

省略されたプロパティ定義では、以下のような記述により値の初期化もできるわけだけど、

 Public Property ID As Integer = 0

この形のみ提供されたとして、

 Public ReadOnly Property ID As Integer = 0

なんて記述が可能になっても、これは内に対しても外に対しても定数的な扱いにしかならないので、これも使い道はないことはないとは思うけど、限りなくないに近いということで(なんのこっちゃ)、これも意味なし。

タグ: ,

Visual Basic | Visual Studio

コメント

2008/11/05 10:40:24 #

C# だと

public int Hoge
{
  get;
  private set;
}

とすることで、「getter は公開&setter は非公開」てのができます。

渋木宏明

2008/11/05 12:08:31 #

おおすばらしい!

VBでこれを考えた場合、
Public Property Hoge As Integer
  Private Set(ByVal value As Integer)
  End Set
End Property
になっちゃうけど、これだとC#とちがって文法上Getterの存在が見えないのであまりよくないですね。
従来通り、
Public Property Hoge As Integer
  Get()
  End Get
  Private Set(ByVal value As Integer)
  End Set
End Property
ってのが妥当かな。

それよりも、VB9からのRelax deligateみたく、Setter のパラメータの記述を省略できると楽かも。
リクエストしてみよ。

Tomotoshi

コメントを書く




biuquote
  • コメント
  • プレビュー
Loading



杉下 朋年

Tomotoshi Sugishita
Tomotoshi Sugishita
< D&UNITE 株式会社 >

Microsoft MVP
Microsoft MVP for Development Platforms
- ASP.NET/IIS Jul.2009 - Jun.2012
Microsoft MVP for Development Tools
- Visual Basic Jul. 2004 - Jun. 2009

 

カレンダー

<<  2月 2012  >>
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

投稿一覧をカレンダーで表示