Скажем, у меня есть интерфейс, как это:Использование методов расширения внутри расширенного класса сам
public interface ILoggable
{
void Log(Func<string> message, Logger.Type type);
}
И некоторые расширения методов, как это:
public static class Logger
{
public static void Log(this ILoggable loggable, Func<string> message) { loggable.Log(message, Type.Information); }
public static void Log(this ILoggable loggable, string prefix, byte[] data, int len) { /* snip */ }
public static void Log(this ILoggable loggable, Exception ex) { /* snip */ }
// And so on...
}
Тогда в любом class CoreService : ServiceBase, ILoggable
или такой я реализовать что public void Log(Func<string> message, Logger.Type type)
на все, что мне нравится (public modifier is kind meh ...) и использовать все методы расширения для фактического ведения журнала.
Пока все хорошо ... или не так хорошо? Что-то не так с этим подходом? Если нет, то почему неудобством:
catch (Exception ex) {
this.Log(ex); // this works
Log(ex); // this goes not
Вы также можете вызвать 'Log (this, ex)', который кажется более читаемым в этой ситуации. –
@HenkHolterman: Ну, вам придется звонить Logger.Log (это, например) ... –