Extension Methods and null Objects

C# 3.0 allows adding new methods to existing types. These are called Extension Methods. This allow programmers to add methods to existing types, even if they are not partial or event sealed.

These special methods have to be declared in a special way:

  1. They must be declared within a static class
  2. They must be static
  3. The first parameter of the method has to be the type that is "extended", preceded by the this keyword

So, for example, let’s copy the very useful IsNullOrEmpty method as an extension method.

public static class Extensions
{
    public static bool IsNullOrEmpty(this String s)
    {
        return String.IsNullOrEmpty(s);
    }
}

Simple. Calling this

String s = "";
s.IsNullOrEmpty();

returns true. You can even do

"".IsNullOrEmpty();

which returns true as well.

Now, all of this is actually an illusion. When the compilers finds

"".IsNullOrEmpty();

he will translates it in

Extensions.IsNullOrEmpty("");

So, when an extension method is used, there is one more parameter, that is of the type the extension method is defined on. In this case, String.

But, if it as parameter, it can be null, right? Yes!

String s = null;
s.IsNullOrEmpty();

or even

((String) null).IsNullOrEmpty()

will both work, without trowing a NullReferenceException.

Nothing revolutionary here, but I found funny to "call" method on a null object and not have an exception raised.

Comments

2 Responses to “Extension Methods and null Objects”

  1. "Calling a method on null a reference" by Jon Skeet : Philippe on January 18th, 2009 17:11

    [...] months ago, I wrote a blog post called Extension Methods and null Objects. In this post, I described how to write Extension Methods in C# 3 and wrote a small sample code to [...]

  2. Instance Methods Called on null References : Philippe on July 12th, 2010 19:27

    [...] a previous post, I wrote how you can call Extension Methods on null references, as in fact the are static methods [...]