とりこらぼ。

Learn from yesterday,
live for today,
hope for tomorrow.

目次

Blog 利用状況

ニュース

プロフィール

  • 名前:とりこびと
    とるに足らない人間です。

  • Wankuma MVP
    for '平々凡々'

Web Site

  • Memo(Of T)

もうひとつの Blog

広告っぽい

書庫

日記カテゴリ

Visual Basic 9.0 って、どんなんかーなぁー♪ その3。- Anonymous Types -

Visual Basic 9.0 って、どんなんかーなぁー♪ その2。- Object and Array Initializers -

なんだか深みにはまっていますが・・・今回はAnonymous Types (匿名型)です。

まずはフンイキから。

Dim torikobito = New With {.ID = 76, .Name = "とりこびと"}

もうね、なんのこっちゃわかりませんね。変数 torikobito の型は何なんですか?


変数 torikobito:「あの~、すみません。匿名でお願いします!!(汗」


・・・匿名型です。Visual Basic のコンパイラは、宣言の右側から以下のようなクラスを作成します。Object Initializer による推測っぽいですね。

Class _ID_As_Integer_Name_As_String_

    Public Property ID As Integer
    Public Property Name As String
End Class

あまりに不思議すぎて、いろいろやってみたくなったのでMicrosoft Visual Basic Codename Orcas Express Edition(バージョン情報で見るとMicrosoft Visual Studio Codename Orcas Version 9.0.20404.0 Beta1になってる)で、ゴソゴソしてみました。

で、前回のを踏まえると、

Option Strict Off
Option Infer On

Public Class Program

    Public Shared Sub Main()
        Dim members() = { _               New With {.ID = 12, .Name = "επιστημη"}, _               New With {.ID = 28, .Name = "アクア"}, _               New With {.ID = 33, .Name = "刈歩 菜良"}, _               New With {.ID = 51, .Name = "ぽぴ王子"}, _               New With {.ID = 56, .Name = "シャノン"}, _               New With {.ID = 76, .Name = "とりこびと"}, _               New With {.ID = 95, .Name = "片桐 継"} _               }
    End Sub

End Class

例によってOption Strict Offなのですがw

一見、わんくまお笑い同盟のメンバーに見えますが、匿名型での配列の宣言です。

Array Initializer がまだ未実装らしいので、とりあえず、変数 members はObject型の配列になりました。

で、以下の様子。

Option Strict Off
Option Infer On

Public Class Program

    Public Shared Sub Main()
        Dim members() = { _               New With {.ID = 12, .Name = "επιστημη"}, _               New With {.ID = 28, .Name = "アクア"}, _               New With {.ID = 33, .Name = "刈歩 菜良"}, _               New With {.ID = 51, .Name = "ぽぴ王子"}, _               New With {.ID = 56, .Name = "シャノン"}, _               New With {.ID = 76, .Name = "とりこびと"}, _               New With {.ID = 95, .Name = "片桐 継"} _               }

        For Each member In members
            Console.WriteLine("ID:{0}  Name:{1}", member.ID.ToString, member.Name)
        Next
    End Sub

End Class

なにげにコードをお見せしていますが、members がObject型の配列なので、For Each のループ コントロール変数 member はObject 型です。なので

Console.WriteLine("ID:{0}  Name:{1}", member.ID.ToString, member.Name)

member.ID とか、member.Name とかはインテリセンスに表示はされません。でも、実行すると以下のように出力に成功します。

ID:12 Name:επιστημη
ID:28 Name:アクア
ID:33 Name:刈歩 菜良
ID:51 Name:ぽぴ王子
ID:56 Name:シャノン
ID:76 Name:とりこびと
ID:95 Name:片桐 継

えっと・・・、すでにリアクションがとりづらいのですが(苦


完全に遅延バインディングモード全開です。全開なので配列の要素の型がバラバラでもメンバの呼び出しが可能です。




といっても、Array Initializer がまだ未実装らしいですし、リリース前なので今後変更になる可能性があります。っていうか、なると思います。っていうか、なってください。お願いします。なので、鵜呑みは禁物ですよ!

投稿日時 : 2007年7月20日 19:21

Feedback

# re: Visual Basic 9.0 って、どんなんかーなぁー♪ その3。- Anonymous Types - 2007/07/20 19:23 とりこびと

Dim torikobito = New With {.ID = 76, .Name = "とりこびと"}

Object Initializerはプロパティと推測してはくれないのだろうか・・・?

# re: Visual Basic 9.0 って、どんなんかーなぁー♪ その3。- Anonymous Types - 2007/07/20 19:35 かるあ

あれ?
> Dim torikobito = New With {.ID = 76, .Name = "とりこびと"}
は型推論をONにしとけば匿名型のプロパティとして推論してくれませんか?

# re: Visual Basic 9.0 って、どんなんかーなぁー♪ その3。- Anonymous Types - 2007/07/20 19:48 とりこびと

かるあ さん、コメントありがとうございます。

>型推論をONにしとけば匿名型のプロパティとして推論してくれませんか?

試してきました。
おっしゃられるとおりでした。
フィールドと勘違いしてました。orz


本文も間違ってますね。訂正しておきます。

# re: Visual Basic 9.0 って、どんなんかーなぁー♪ その3。- Anonymous Types - 2007/07/20 19:50 とりこびと

てか、一番大切なところを間違える私って・・・。orz

帰ってふて寝しよw

# Visual Basic 9.0 って、どんなんかーなぁー♪ その4。- Deep XML Support - 2007/07/23 19:27 とりこびと ぶろぐ。

Visual Basic 9.0 って、どんなんかーなぁー♪ その4。- Deep XML Support -

# Visual Basic 2008 の新機能 - 匿名型 その1 - 2008/01/07 19:27 とりこらぼ。

Visual Basic 2008 の新機能 - 匿名型 その1 -

# Visual Basic 2008 の新機能 - 匿名型 その2(キー プロパティ) - 2008/01/07 21:51 とりこらぼ。

Visual Basic 2008 の新機能 - 匿名型 その2(キー プロパティ) -

# VBAでフォームのコントロールを配列に(擬似コントロール配列) 2008/04/28 22:29 Mlog OG

フォームとかダイアログとかのコマンドボタンのコントロールでほとんどおんなじイベント処理をするんだけど、複数個所に置く必要があるとき。 VBだとコントロール配列に...

# <url>http://www.leadinglifeinsurancebrands.com/|life insurance</url> exfmbg <url>http://www.getlifeinsurancequotes.net/|life insurance</url> 1902 <url>http://www.insuranceslife.net/|life insurance</url> %-[ <url>h 2012/11/03 22:44 Jayvee

<url>http://www.leadinglifeinsurancebrands.com/|life insurance</url> exfmbg <url>http://www.getlifeinsurancequotes.net/|life insurance</url> 1902 <url>http://www.insuranceslife.net/|life insurance</url> %-[ <url>http://www.affordinsurance.net/|auto insurance</url> :-[[[

# <url>http://www.comparedrugprices.net/|purchase prednisone</url> 61817 <url>http://www.competitiveinsurancequote.net/|cheap california auto insurance</url> 849424 <url>http://www.mylifeinsurancecompany.net/|life insurance pol 2012/11/26 0:16 Tish

<url>http://www.comparedrugprices.net/|purchase prednisone</url> 61817 <url>http://www.competitiveinsurancequote.net/|cheap california auto insurance</url> 849424 <url>http://www.mylifeinsurancecompany.net/|life insurance policy</url> >:(((

# <url>http://www.mom-threw-out.com/|inexpensive car insurance</url> lhjw <url>http://compareinsurdeals.com/|new jersey car insurance</url> =-(( <url>http://www.autoinsurcoverage.com/|auto insurance quotes</url> 733482 2013/02/23 12:28 Kalin

<url>http://www.mom-threw-out.com/|inexpensive car insurance</url> lhjw <url>http://compareinsurdeals.com/|new jersey car insurance</url> =-(( <url>http://www.autoinsurcoverage.com/|auto insurance quotes</url> 733482

# JnmhNJUdpaUggWKXIb 2017/02/19 21:12 JimmiXzSw

EacY5j http://www.FyLitCl7Pf7ojQdDUOLQOuaxTXbj5iNG.com

# I know this web page offers quality dependent posts and other data, is there any other web page which gives these data in quality? 2017/02/25 14:26 I know this web page offers quality dependent post

I know this web page offers quality dependent posts and
other data, is there any other web page which gives these data in quality?

# I dugg some of you post as I cerebrated they were very beneficial extremely helpful. 2017/03/06 3:51 I dugg some of you post as I cerebrated they were

I dugg some of you post as I cerebrated they were very
beneficial extremely helpful.

# It's very easy to find out any matter on web as compared to books, as I found this piece of writing at this web page. 2017/04/14 20:39 It's very easy to find out any matter on web as co

It's very easy to find out any matter on web as compared to books, as
I found this piece of writing at this web page.

タイトル
名前
Url
コメント