CSharpFeeds - All your C# feeds in one place.

Sponsors

Monday, May 14, 2007

UPDATE: Extension methods

by Paulo Morgado via Paulo Morgado : C# on 5/14/2007 10:28:19 PM

Looks like I was way wrong in here and here.

I had thought that from the top of my head because I tried to use Array.IndexOf as an extension method and was surprised to see that it wasn't an extension method.

It presented a good opportunity to play around with extension methods, so I wrote a class to extend the Array class:

public static class ArrayUtils

{

    public static int IndexOf<T>(this T[] array, T value)

    {

        return System.Array.IndexOf(array, value);

    }

 

    public static int IndexOf<T>(this T[] array, T value, int startIndex)

    {

        return System.Array.IndexOf(array, value, startIndex);

    }

 

    public static int IndexOf<T>(this T[] array, T value, int startIndex, int count)

    {

        return System.Array.IndexOf(array, value, startIndex, count);

    }

}

It was so easy that I thought: "Why dind't they do it?".

While I was trying to write a proof of concept around making such a change in a class (changing normal static methods into extension methods). It was as simple as adding a this keyword:

public class MyClass

{

    private int myField;

 

    public int MyProperty

    {

        get { return myField; }

        set { myField = value; }

    }

 

    public static bool IsNullOrEmpty(this MyClass value)

    {

        if (value == null) return true;

        if (value.myField == 0) return true;

        return false;

    }

}

The output of the compiler just chilled my enthusiasm:

MyCsClass.cs(18,47): error CS1106: Extension methods must be defined in a non generic static class

What is this all about? How had I missed it in here and here?

Here's how I had missed it:

http://search.msdn.microsoft.com/search/Default.aspx?brand=msdn&query=%22non-nested%22+%22non-generic%22+%22static+class%22+%22extension+methods%22

http://search.live.com/results.aspx?q=%22non-nested%22+%22non-generic%22+%22static+class%22+%22extension+methods%22

I should have tried this:

http://www.google.com/custom?client=pub-3578125481836759&channel=1972798655&cof=S%3Ahttp%3A%2F%2Fsearchdotnet.com%2Fdefault.aspx%3BCX%3ADotNet%2520Developers%2520Search%2520Engine%3BL%3Ahttp%3A%2F%2Fwww.searchdotnet.com%2Fimages%2Fsearchnet.jpg%3BLH%3A36%3BLP%3A1%3B&q=%22non-nested%22+%22non-generic%22+%22static+class%22+%22extension+methods%22

THIS is the most recent (I think) specification of C# 3.0 and it states that:

Extension methods are declared by specifying the keyword this as a modifier on the first parameter of the methods. Extension methods can only be declared in non-generic, non-nested static classes.

Now it's all clear!

email it!bookmark it!digg it!

Original Post: UPDATE: Extension methods

Subscribe

New Feed

Product Spotlight

Recently Updated Sources

Legal Note

The content of the postings is owned by the respective author. CSharpFeeds is not responsible for the contents of the postings. This site is automatically generated and cannot be reviewed for abusive content. If you find abusive content on CSharpFeeds, please contact us. Designated trademarks and brands are the property of their respective owners. All rights reserved.

Advertise with us