Reshaper is a cool tool that can save you plenty of time (unless you start blogging about it of course ;-))
I will give the examples in VB.Net but this will also work in C#.
We all know what a DomainEntity looks like, right?
Ok so here is a simple example.
- Public Class person
- Private _id As Guid
- Private _name As String
- End Class
First thing to do is create properties for it.
For this we use the Reshaper generate option, which is available via the shortcut Alt+Ins or via the menu Resharper->Generate.
This brings up the following contextmenu:

We choose Read-only properties:

And get this as a result:
- Public Class person
- Private _id As Guid
- Overridable Public ReadOnly Property _idProperty() As Guid
- Get
- Return _id
- End Get
- End Property
- Private _name As String
- End Class
Not ideal, but a timesaver none the less.
We do the same but then as a normal property for name.
And get this as a result:
- Public Class person
- Private _id As Guid
- Overridable Public ReadOnly Property _idProperty() As Guid
- Get
- Return _id
- End Get
- End Property
- Private _name As String
- Overridable Public Property _nameProperty() As String
- Get
- Return _name
- End Get
- Set (ByVal value As String)
- _name = value
- End Set
- End Property
- End Class
But now for the most important part. The overriding of the Equals and GetHashCode methods.
So we do Alt+Ins again and choose Equality members and get this dialog. We choose name and some other things that seem useful.

And we get this as a result:
- Public Class person
- Implements IEquatable(Of person)
- Private _id As Guid
- Overridable Public ReadOnly Property _idProperty() As Guid
- Get
- Return _id
- End Get
- End Property
- Private _name As String
- Public Overloads Function Equals (ByVal obj As person) as Boolean
- If ReferenceEquals (Nothing, obj) Then Return False
- if ReferenceEquals (Me, obj) Then Return True
- Return Equals (obj._name, _name)
- End Function
- Public Overloads Overrides Function Equals (ByVal obj As Object) as Boolean
- If ReferenceEquals (Nothing, obj) Then Return False
- if ReferenceEquals (Me, obj) Then Return True
- If Not Equals (obj.GetType(), GetType (person)) Then Return False
- Return Equals (DirectCast (obj, person))
- End Function
- Public Overrides Function GetHashCode() as Integer
- If _name IsNot Nothing Then Return _name.GetHashCode()
- Return 0
- End Function
- Overridable Public Property _nameProperty() As String
- Get
- Return _name
- End Get
- Set (ByVal value As String)
- _name = value
- End Set
- End Property
- End Class
Cool, right, in a few clicks we got a whole lot of code. And a whole lot of working code to boot. It isn’t pretty, but there are things you can do about that.
There is also Formatting members which creates a ToString.
Which creates something like this.
- Public Overrides Function ToString() as String
- Return string.Format ("_id: {0}, _name: {1}", _id, _name)
- End Function
I don’t know who came up with the names but they should look at Eclipse, it is much clearer there. And the property names aren’t what I would expect, a return to hungarian comes to mind.





LTD Social Sitings
Note: Watch for social icons on posts by your favorite authors to follow their postings on these and other social sites.