Skip to content

Default interface methods C# 8 and later

Context: C# 8 introduced default implementations for interface methods. This allows adding new members to interfaces without breaking existing implementations.

public interface ILogger
{
void Log(string message);
// Default implementation
void LogError(string error) => Log($"ERROR: {error}");
}
public class ConsoleLogger : ILogger
{
public void Log(string message) => Console.WriteLine(message);
// LogError is optional; uses default if not overridden
}
public class FileLogger : ILogger
{
public void Log(string message) => File.WriteAllText("log.txt", message);
public void LogError(string error) => Log($"Custom error: {error}");
}

Default methods are only accessible through the interface type.

ILogger logger = new ConsoleLogger();
logger.LogError("Oops"); // calls default or overridden
  • Adding methods to widely used interfaces (e.g., IEnumerable<T>).
  • Providing backward compatibility.