Interface
From Logic Wiki
Contents
Why Interfaces?
Because devs want their codes are
- Maintainable
- Extensible
- Easily Testable
What Is Interface
Microsoft says
Interfaces describe a group of functions that can belong to any class or struct
Other Def
it's a contract with public set of members:
- Properties
- Methods
- Events
- Indexers
Interface is just a contract, No implementation. Based on abstract classes.
public abstract class AbstractRegularPolygon { public int NumberOfSides{get; set;) public int SideLength{get; set;) public AbstractRegularPolygon{int sides, int length) { NumberOfSides = sides; SideLength = length; } public double GetPerimeter() { return NumberOfSides * SideLength; } public abstract double GetArea() }
public class Triangle:AbstractRegularPolygon { public Triangle(int Length): base(3, Length){} public override double GetArea() { return SideLength * SideLength * Math.Sqrt(3) / 4; } }
public interface IRegularPolygon { int NumberOfSides{get; set;} int SideLength{get; set;}
double GetPerimeter(); double GetArea(); }
Comparison between abstract classes and interfaces
- abstract classes may contain implementation, interfaces are only declarations
- a class can inherit from a single abstract class, but inherit from multiple interfaces
- abstract classes has access modifiers like public private, but interfaces are always public and don't use access modifiers
- abstract classes can have valid members like Fields, Properties, Constructors, Destructors, Methods, Events, Indexers, but interfaces are a bit more limited and can have Properties, Methods, Events, Indexers
Sample of Concrete and Interface diff
Concrete
List<Person> people; people = peopleRepo.GetPeople(); foreach (var person in people) PersonListBox.Items.Add(person)
Interface
IEnumerable<Person> people; // IEnumeralbe people -> Not strongly typed usage people = peopleRepo.GetPeople(); foreach (var person in people) PersonListBox.Items.Add(person)