Ну, это сложнее, чем кажется.Другие говорят, что это возможно, и я не сомневаюсь в них, но, похоже, это не так в Mono.
Там стандартные перегрузки метода Format()
, кажется, имеют приоритет впроцесс разрешения имен, и компиляция завершается неудачно, потому что статический метод в конечном итоге вызывается для экземпляра объекта, что недопустимо.
С учетом этого кода:
public static class Extensions
{
public static string Format(this string str, params object[] args)
{
return String.Format(str, args);
}
}
class Program
{
public static void Main()
{
Console.WriteLine("string goes here {0} {1}".Format("foo", "bar"));
}
}
Компилятор Mono (mcs 2.10.2.0) отвечает:
foo.cs (15,54): ошибка CS0176: Статический член `string.Format (string, object) 'не может быть доступен с помощью ссылки на экземпляр, квалифицируйте его каквместо этого введите имя
Конечно, вышеприведенное компилируется чисто, если метод расширения не назван Format()
, но, возможно, вы действительно хотите использовать это имя.Если это так, то это невозможно, или, по крайней мере, не во всех реализациях платформы .NET.