Методы расширения: просто изменение времени компиляции с:
x.GetValueAsBoolean()
до
Extensions.GetValueAsBoolean(x)
Это все, что нужно - преобразовать то, что похоже на вызов метода экземпляра, в вызов статического метода.
Если у вас нет проблем с производительностью статического метода, то создание метода расширения не создаст никаких новых проблем.
РЕДАКТИРОВАТЬ: IL, в соответствии с просьбой ...
Взяв этот образец:
using System;
public static class Extensions
{
public static void Dump(this string x)
{
Console.WriteLine(x);
}
}
class Test
{
static void Extension()
{
"test".Dump();
}
static void Normal()
{
Extensions.Dump("test");
}
}
Вот IL для Extension
и Normal
:
.method private hidebysig static void Extension() cil managed
{
// Code size 13 (0xd)
.maxstack 8
IL_0000: nop
IL_0001: ldstr "test"
IL_0006: call void Extensions::Dump(string)
IL_000b: nop
IL_000c: ret
} // end of method Test::Extension
.method private hidebysig static void Normal() cil managed
{
// Code size 13 (0xd)
.maxstack 8
IL_0000: nop
IL_0001: ldstr "test"
IL_0006: call void Extensions::Dump(string)
IL_000b: nop
IL_000c: ret
} // end of method Test::Normal
Как видите, они точно такие же.