C# Exception Handling
C# File I/O
C# Delegates and Events
C# Generics
C# Async Programming
C# Interfaces

C# Interfaces

An interface is a pure contract — it lists method/property signatures that implementing classes must provide. A class can implement any number of interfaces.

1 - Defining and Implementing

public interface IDrawable
{
    void Draw();
}

public interface IResizable
{
    void Resize(double factor);
    double GetSize();
}

public class Circle : IDrawable, IResizable
{
    private double _radius;
    public Circle(double r) => _radius = r;

    public void Draw()              => Console.WriteLine($"Drawing circle r={_radius:F1}");
    public void Resize(double f)    => _radius *= f;
    public double GetSize()         => _radius;
}

IDrawable d = new Circle(5);
d.Draw(); // Drawing circle r=5.0

2 - Interface as Type

public interface ILogger
{
    void Log(string message);
}

public class ConsoleLogger : ILogger
{
    public void Log(string msg) => Console.WriteLine($"[LOG] {msg}");
}

public class FileLogger : ILogger
{
    public void Log(string msg) => File.AppendAllText("app.log", msg + "\n");
}

void Process(ILogger logger)
{
    logger.Log("Processing started");
    // ... work ...
    logger.Log("Processing done");
}

Process(new ConsoleLogger());
Process(new FileLogger());

3 - Default Interface Methods (C# 8+)

public interface IGreeter
{
    string Greet(string name);
    string GreetAll(string[] names) => string.Join(", ", names.Select(Greet));
}

Note: Program to interfaces, not concrete types. Pass ILogger, not ConsoleLogger, into your methods. This decouples your code and makes unit testing trivial — just pass a mock logger in tests.

-Tip-