Setting a property via anonymous delegates

I was looking for a way to pass a parameter by reference today.  More specifically the setter.

I found a couple interesting blog posts

http://geekswithblogs.net/akraus1/archive/2006/02/10/69047.aspx

notice the comment by Tedesco.

He offers a nice way to do this via an anonymous delegate.

    public delegate void InsertString( System.String param );
public partial class Bird
{
public void FileToDb( int x )
{
FillEntityColumn( delegate( System.String value )
{
tExtra.Text = value;
} );
}
}

So we actual pass the FillEntityColumn method an anonymous delegate which then sets the property.

Now in vb you can write

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

testme(TextBox1.Text)
End Sub
Sub testme(ByRef s As String)
s = "hello"
End Sub

which a commenter on http://musingmarc.blogspot.com/2006/04/tale-of-two-implementations.html eluded to.  But in vb you still cannot pass a Property by reference, at least not really.  Take a look what vb generates into il.

    Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim VB$t_ref$S0 As TextBox = Me.TextBox1
Dim VB$t_string$S0 As String = VB$t_ref$S0.Text
Me.testme((VB$t_string$S0))
VB$t_ref$S0.Text = VB$t_string$S0
End Sub
As you can see vb is writing some code for you which is nice, but we are still not passing the property by ref.
   -Mike has also talked about the want of passing parameters. ( the same misguided comment that vb supports passing parameters by ref)
Comments [1]