Авторы C# реализовали так:
public static class StringExtensions
{
public static int WordCount(this String str)
{
return str.Split(new char[] { ' ', '.', '?' },
StringSplitOptions.RemoveEmptyEntries).Length;
}
}
А мне сегодня пришла в голову идея, что можно было бы реализовать так:
public static class ExtendedString: String
{
public int WordCount()
{
return this.Split(new char[] { ' ', '.', '?' },
StringSplitOptions.RemoveEmptyEntries).Length;
}
}
По спецификации статический класс и так не мог наследовать другой класс:
ЦитироватьA static class may not include a class-base specification (§10.1.4) and cannot explicitly specify a base class or a list of implemented interfaces.
так что эту идиому можно было бы переосмыслить как "экстеншн-класс".
Плюс в том, что используем обычный this при обращении к полям и методам (публичным), и выглядит всё естественнее. Минус в том, что больше магии и меньше понимания, чё происходит.