MSIL Trivia - 2 (Setters in C#)
Background: Let's create a setter in C# with a simple getter and setter...
using System;
class Employee
{
private string name;
public string Name
{
get
{
return name;
}
set
{
name=value;
}
}
}
class App
{
public static void Main()
{
Employee e = new Employee();
e.Name = "Rahul Soni";
Console.WriteLine (e.Name);
}
}
Question> What will happen if you use any other word than value in the code above?? We haven't declared it, but your compiler is still good with it. Do you know why?
Answer> Well, the answer lies in the way your C# compiles this code into MSIL. Let's have a look at MSIL...
Does it mean, that you can call this public method set_Name from your code directly instead of using e.Name above. Of course not!
Contrast this usage in VB...
Module Module1
Private _name As String = String.Empty
Public Property Name() As String
Get
Return _name
End Get
Set(ByVal val As String)
_name = val
End Set
End Property
Public Sub Main()
Name = "Rahul Soni"
Console.WriteLine(Name)
End Sub
End Module
As you can see, in VB.NET you can use val instead of value and the MSIL would be generate appropriately.
So, why do you care to know about this little stuff? One reason I could think of is to ensure, that if you have a genuine curiosity... it will feel good to have it answered. I started as a VB.NET programmer and am comparatively new to C# and when I saw the setter using that value without declaring it, I was pretty confused :-)
Cheers,
Rahul
Quote of the day:
Hard work never killed anybody, but why take a chance? - Edgar Bergen