Rob - April 13, 2008 18:28

Extension Methods in VS 2008
If you ever wish you could add a method to an existing class without having to inherit, then you can rest easily knowing that this new feature in VS 2008 could save you some headaches. 

Let’s say for example you have the need to strip HTML tags from strings all throughout your code.  You could write a shared function and call it like so:

    Dim comments As String
    comments = WebUtils.StripHtml(Me.txtComments.Text)

Where the shared function to strip the HTML looks like:

    Public Shared Function StripHtml(ByVal html As String) As String
        If html Is Nothing OrElse html = String.Empty Then
            Return String.Empty
        Else
            Return Regex.Replace(html, "<(.|\n)+?>", String.Empty)
        End If
    End Function

Which isn’t a bad way to go, but what if you could extend that sealed String class?  What if you would like it to show up using IntelliSense?  Would that make things much easier?

    Dim comments As String
    comments = Me.txtComments.Text.StripHtml

I would say the code is even more readable then the previous example.  The only difference between the two methods is the added:  <Extension()> _

    <Extension()> _
    Public Function StripHtml(ByVal html As String) As String
        If html Is Nothing OrElse html = String.Empty Then
            Return String.Empty
        Else
            Return Regex.Replace(html, "<(.|\n)+?>", String.Empty)
        End If
    End Function

Once you have your [Extension()] ready to go, you can see the results using IntelliSense.  Notice your new extension method has a down arrow just to the left of the extension name?  Thus you will always know if you are calling an extension method, or a native method of the class.


The obvious downfall of using extension methods would be software engineers starting to use them like they are going out of style.  If the situation calls for it one should use inheritance, but this could be a quick way to add that one method you need without having to use the inherited class all throughout your code.


Posted in: Rob's Rants  Tags: ,

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Related posts

Add comment


(Will show your Gravatar icon)  

  Country flag

[b][/b] - [i][/i] - [u][/u]- [quote][/quote]



Blog Calendar

«  August 2008  »
SuMoTuWeThFrSa
272829303112
3456789
10111213141516
17181920212223
24252627282930
31123456
View posts in large calendar

Recent Posts

Recent Comments

Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my wife's view in anyway, unless she wrote it.

© Copyright 2008 Teegarden.net