のは、私はこのように、インターフェイスを持っているとしましょう:拡張クラス内の拡張メソッド自体を使用して
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)
です(一般的な修飾子はmehのようなものです...)。実際のロギングを行うには、すべての拡張メソッドを使います。
これまでのところとても良い...またはあまり良くないですか?このアプローチに何か問題がありますか?そうでない場合は、なぜ不便:
catch (Exception ex) {
this.Log(ex); // this works
Log(ex); // this goes not
このような状況では、もっと読みやすいと思われる 'Log(this、ex)'も呼び出すことができます。 –
@HenkHolterman:Logger.Log(this、ex)を呼び出す必要があります。 –