Я собираюсь быть тем, кто скептичен. То, что вы описываете, технически не является частью языка. Сожалею. Но возможно смоделировать его на языке.
Давайте рассмотрим то, что вы просите - вам нужен набор методов, которые не привязаны к какому-либо конкретному объекту, которые можно легко вызывать и заменять во время выполнения или компиляции.
Для меня это звучит так, как будто вам действительно нужен одноэлементный объект с делегированными методами.
Давайте соберем пример:
public interface ICurrencyWriter {
string Write(int i);
string Write(float f);
}
public class DelegatedCurrencyWriter : ICurrencyWriter {
public DelegatedCurrencyWriter()
{
IntWriter = i => i.ToString();
FloatWriter = f => f.ToString();
}
public string Write(int i) { return IntWriter(i); }
public string Write(float f) { return FloatWriter(f); }
public Func<int, string> IntWriter { get; set; }
public Func<float, string> FloatWriter { get; set; }
}
public class SingletonCurrencyWriter {
public static DelegatedCurrencyWriter Writer {
get {
if (_writer == null)
_writer = new DelegatedCurrencyWriter();
return _writer;
}
}
}
используется:
Console.WriteLine(SingletonCurrencyWriter.Writer.Write(400.0f); // 400.0
SingletonCurrencyWriter.Writer.FloatWriter = f => String.Format("{0} bucks and {1} little pennies.", (int)f, (int)(f * 100));
Console.WriteLine(SingletonCurrencyWriter.Writer.Write(400.0f); // 400 bucks and 0 little pennies
Учитывая все это, у нас теперь есть одноэлементный класс, который записывает значения валют, и я могу изменить его поведение. Я в основном определил поведение Convention во время компиляции и теперь могу изменить поведение во время компиляции (в конструкторе) или во время выполнения, что, я полагаю, является эффектом, который вы пытаетесь получить. Если вы хотите наследовать поведение, вы можете сделать это путем реализации обратного связывания (т. Е. Заставить новый метод вызывать предыдущий).
Тем не менее, я не особенно рекомендую приведенный выше пример кода. С одной стороны, это не потокобезопасно, и на самом деле не так много места, чтобы сохранить жизнь в здравом уме. Глобальная зависимость от такого рода структур означает глобальную нестабильность. Это один из многих способов, которыми изменяемое поведение было реализовано в смутные мрачные дни структур C: указателей на функции, и в данном случае единой глобальной структуры.