BT

VBとC#の自動実装プロパティ

| 作者: Jonathan Allen フォローする 609 人のフォロワー , 翻訳者 竹中 翔 - (株)ポータルアイランド フォローする 0 人のフォロワー 投稿日 2009年6月17日. 推定読書時間: 1 分 |

原文(投稿日:2009/6/15)へのリンク

C# 3.0では自動実装プロパティが追加されたが、同時にリリースされたVisual Basicにはこれに相当する機能がなかった。近々リリースされる.NET 4.0では、独特なところはあるものの、VBも自動実装プロパティを持つことになる。C#の自動実装プロパティはこのように書く。

public string FirstName {get; set;}

Visual BasicではプロパティにPropertyキーワードが必要なので、フィールドと区別するためにget/setのペアが必要ない。従って、VBでの自動実装プロパティはフィールドとたった1トークンだけが異なる。

Public Property FirstName As String

VBでもC#でも、自動実装プロパティに対応するフィールドが自動的に作られる。C#では自動的に生成された“<FirstName>k__BackingField”のような名前を持つ。もちろん、このフィールドは通常のC#の構文からはアクセスできない。Visual Basicはずっと単純で、単にプロパティ名の先頭にアンダースコアをつけるだけである。だから、プロパティの名前が“FirstName”ならば、“_FirstName”というフィールドができることになる。

バッキングフィールドへの直接アクセスはもっと多くのことを可能にすべきだ。そのひとつとして、プロパティをReadOnlyにし、コンストラクタでその値をセットできるようにすべきだ。悲しいかな、そのようなことはできない。

C#にもそのような制限があるように見えるが、実際にはもっと柔軟である。セッターにprivateかprotectedをつければ、事実上バッキングフィールドにアクセスするのと同じことができる。

public string FirstName {get; private set;}

両言語に共通する制限は、まだ不変オブジェクト(immutable object)を作成するための便利な方法を持たないことだ。もし全てのプロパティやフィールドが読み取り専用で、それらの値がコンストラクタだけからセットされるようにするなら、まだ.NET 1.0の時と同じようにコードを書かなければならない。

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT