Saturday, March 07, 2009

けろ-みおさんより

[VB2010]自動実装プロパティ の記事に

>仕組み上、本当に等価であるのか?ILDASMの結果を掲載してもらえると嬉しいです。

というコメントををいただいたので調べてみました。

まず class1 と class2 というクラスを準備し、

class1にはこれまで通りの書き方でプロパティを作成

class2には自動実装プロパティを作成

コードは下記の通りです。

これを ILDASM で比較表示してみました。

上記の結果から、これまでの「書き方と自動実装プロパティは等価である」と言うことを証明できました。


ついでなので VS2010 CTP の C# の方も見てみました。

VB.NETと同じように、class1にはこれまで通りの書き方で、class2には自動実装プロパティで書きました。

ちなみに C#の方はたしか 3.0 のバージョンから自動実装プロパティが使用できるようになったと記憶しています。

 

 

で ILDASM の結果は下記の通りです。

class2の方では裏で<employee>k__BackingField という private stringが作成されていることがわかります。

これはMSDNの自動実装するプロパティ (C# プログラミング ガイド) で バッキングフィールド という名称で説明がされています。

ということで、C#の方は厳密には等価ではないことがわかります。

Saturday, March 07, 2009 12:01:06 AM (Tokyo Standard Time, UTC+09:00)  #    Comments [0]  |  Trackback
Tuesday, July 08, 2008

今日、会社のメンバーからDataGridViewに「ボタン列を追加したいんだけど」と相談を受けました。

「HIRO's.NETにやり方載ってないね」との突っ込みが... 確かにその通り載っていません。

実際には、下記のようなやり方で実現できます。

DataGridViewButtonColumnインスタンス(これがボタン列になります)を作成して、DataGridViewに追加すればOKです。

ボタンがクリックされると、CellContentClickイベントが発生するので、引数e(DataGridViewCellEventArgs)のe.RowIndexやe.ColumnIndexを調べればどのボタンが押されたかがわかります。

実行例は下図のような感じです。

コードは下記の通りです。

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    AddButton()
End Sub

Private Sub AddButton()
    Dim dtSet As New DataSet()
    dtSet.ReadXml("C:\Work\Test.xml")
    DataGridView1.DataSource = dtSet.Tables(0)

    'DataGridViewButtonColumnを作成する
    Dim colBtn As New DataGridViewButtonColumn()

    '列名とボタン名を設定
    colBtn.Name = "ボタン列"
    colBtn.Text = "ボタンです"

    '所有側の列のテキストを、セル内のボタンに表示
    colBtn.UseColumnTextForButtonValue = True


    'DataGridViewに追加する
    DataGridView1.Columns.Add(colBtn)
End Sub

Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, _
    ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick

    If DirectCast(sender, DataGridView).Columns(e.ColumnIndex).Name = "ボタン列" Then
        MessageBox.Show((e.RowIndex + 1).ToString() & "のボタンが押された")
    End If
End Sub
Tuesday, July 08, 2008 11:43:43 PM (Tokyo Standard Time, UTC+09:00)  #    Comments [0]  |  Trackback

Theme design by Jelle Druyts

Pick a theme: