What if you could add new features to your code without breaking everything that already works?
Why Default interface methods in C Sharp (C#)? - Purpose & Use Cases
Start learning this pattern below
Jump into concepts and practice - no test required
Imagine you have several classes that share some common behavior defined by an interface. You want to add a new method to this interface, but now every class that implements it must update their code to include this new method.
This manual update is slow and error-prone because you must find and change every class that implements the interface. Missing one class causes bugs. It's like having to rewrite parts of many recipes just because you want to add a new ingredient.
Default interface methods let you add new methods with a default implementation directly in the interface. This means existing classes don't have to change unless they want to customize the new method. It's like adding a new optional step to a recipe that cooks can follow if they want, without breaking old recipes.
interface IShape { void Draw(); }
// Adding new method requires all classes to implement it
class Circle : IShape { public void Draw() { } /* must add new method here */ }interface IShape {
void Draw();
void Resize() { /* default resize code */ }
}
// Circle class does not need to change unless it wants to override ResizeIt enables evolving interfaces without breaking existing code, making software easier to maintain and extend.
Think of a smartphone app interface that adds a new feature. Default interface methods let developers add this feature without forcing all existing apps to update immediately.
Manually updating all classes for interface changes is tedious and risky.
Default interface methods provide a safe default implementation inside interfaces.
This allows interfaces to grow without breaking existing code.
Practice
Solution
Step 1: Understand interface limitations before default methods
Interfaces could only declare methods without bodies, forcing all implementations to define them.Step 2: Recognize the role of default interface methods
Default interface methods allow interfaces to provide a method body, so implementing classes can use or override it.Final Answer:
Allow interfaces to have method bodies with default behavior -> Option AQuick Check:
Default interface methods = method bodies in interfaces [OK]
- Thinking interfaces cannot have any method bodies
- Confusing default methods with abstract methods
- Believing all methods must be overridden
Solution
Step 1: Recall default method syntax in interfaces
Default interface methods can have bodies using either block or expression-bodied syntax.Step 2: Identify correct syntax among options
void Show() => Console.WriteLine("Hello"); uses expression-bodied syntax correctly inside interface method declaration.Final Answer:
void Show() => Console.WriteLine("Hello"); -> Option DQuick Check:
Default method syntax = method with body in interface [OK]
- Using 'default' keyword before method
- Omitting method body
- Writing method body without braces or expression syntax
interface IExample { void Show() => Console.WriteLine("Default"); }
class Test : IExample { }
var t = new Test();
t.Show();Solution
Step 1: Check if class implements Show()
Class Test does not implement Show(), but interface provides default implementation.Step 2: Understand default method usage
Since Test inherits IExample, it uses the default Show() method from interface.Final Answer:
Default -> Option CQuick Check:
Default method runs if not overridden [OK]
- Assuming missing implementation causes error
- Expecting runtime error without override
- Thinking interface methods can't have bodies
interface ICalc { int Add(int a, int b) => a + b; }
class Calc : ICalc { public int Add(int a, int b); }Solution
Step 1: Check Calc class Add method declaration
Calc declares Add with a semicolon but no body, which is invalid in a class.Step 2: Understand method implementation requirements
Class methods must have bodies unless abstract; here Add is not abstract, so body is required.Final Answer:
Missing method body in Calc's Add method -> Option AQuick Check:
Class methods need bodies unless abstract [OK]
- Thinking interface can't have bodies
- Forgetting to add method body in class
- Assuming method should be static
interface ILogger { void Log(string msg) => Console.WriteLine($"Log: {msg}"); }
class FileLogger : ILogger { public void Log(string msg) => Console.WriteLine($"File: {msg}"); }
class ConsoleLogger : ILogger { }What will be the output of:
ILogger logger1 = new FileLogger();
ILogger logger2 = new ConsoleLogger();
logger1.Log("Test1");
logger2.Log("Test2");
Solution
Step 1: Analyze FileLogger's Log method
FileLogger overrides Log to print "File: {msg}".Step 2: Analyze ConsoleLogger's Log method
ConsoleLogger does not override Log, so uses interface default "Log: {msg}".Step 3: Predict output for each logger
logger1.Log("Test1") prints "File: Test1"; logger2.Log("Test2") prints "Log: Test2".Final Answer:
File: Test1 Log: Test2 -> Option BQuick Check:
Override changes output; default runs if no override [OK]
- Assuming both use default method
- Expecting compilation error due to default method
- Confusing which method runs
