Hallo Edmund,
Für Extension Methods brauchst du zuallererst einen Typ, den du erweitern willst. In einem Beispiel gehe ich mal vom Typ string aus.
Wenn ich dich richtig verstanden habe, möchtest du so etwas erreichen:
"Hello world".DebugOutput("Logging Context");
// oder
"Hello world".DebugOutput(new SpecialLogger(), "Logging Context");
Im ersten Fall wird ein Standard-Logger verwendet und im zweiten Fall ein spezieller, der beim Aufruf mitgegeben wird.
Damit das Ganze funktionert, brauchst du eine statische Klasse, in der die Methode DebugOutput() in zwei Varianten folgenderweise (oder ähnlich) existieren:
public static class LoggingExtensions
{
public static void DebugOutput(this string s, object context)
{
ILogger defaultLogger = GetDefaultLogger();
s.DebugOutput(defaultLogger, context);
}
public static void DebugOutput(this string s, ILogger logger, object context)
{
logger.Log(s, context);
}
private static ILogger GetDefaultLogger()
{
return new DefaultLogger();
}
}Der Vollständigkeit halber hier noch das ILogger-Interface und die ILogger-Ableitungen:
public interface ILogger
{
void Log(string message, object context);
}
public class DefaultLogger : ILogger
{
public void Log(string message, object context)
{
Console.WriteLine("Geloggt mit DefaultLogger: {0}", message);
}
}
public class SpecialLogger : ILogger
{
public void Log(string message, object context)
{
Console.WriteLine("Geloggt mit SpecialLogger: {0}", message);
}
}
Wie du siehst, sind Überladungen mit Extension Methods kein Problem.
Ciao,
Jens