I still think the way extensions in C# was implemented is wrong. It looks and feels like they could not really come up with an ideal syntax and ended up with the awkward result we have today. My suggestion is to do it this way:

public static extension class string
{
    /// <summary>
    /// Shows how a method is implemented
    /// </summary>
    public int GetWordCount()
    {
         var wordCount = 0;
         // Code that counts words
         return wordCount;
    }

    /// <summary> 
    /// Shows how a property is implemented
    ///</summary>
    public int WordCount
    {
        get 
        { 
             var wordCount = 0; 
             // Code that counts words
             return wordCount;
        }
    }
}

Other than the "extension" keyword, it is identical to how the "partial" keyword works. Of course the extension keyword will cause the compiler to impose extension-specific rules. For instance, you can't add fields to the extension class. Doing so will result in a compiler error.

In addition, the compiler will handle the "this" pointer automatically, and a NullReferenceException will be thrown if you try to access an extension method/property when the object is null. So if I type...

string nullString = null;
var wordCount = nullString.WordCount;

...I will get a NullReferenceException thrown just like I would if I called any other method on it.

The advantage is that we don't have to deal with the current awkward syntax that itself can't handle properties. I remember reading somewhere that supposedly the reason that extensions do not support properties is because they could not come up with satisfactory syntax to do it.

BTW this also allows you to create static methods.