An interface is a pure contract — it lists method/property signatures that implementing classes must provide. A class can implement any number of interfaces.
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
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());
public interface IGreeter
{
string Greet(string name);
string GreetAll(string[] names) => string.Join(", ", names.Select(Greet));
}