為什麼我們使用介面

介面是介面使用者與實現介面的使用者之間的契約定義。考慮介面的一種方法是宣告物件可以執行某些功能。

假設我們定義了一個介面 IShape 來表示不同型別的形狀,我們期望一個形狀有一個區域,所以我們將定義一個方法來強制介面實現返回它們的區域:

public interface IShape
{
    double ComputeArea();
}

我們有以下兩種形狀:RectangleCircle

public class Rectangle : IShape
{
    private double length;
    private double width;

    public Rectangle(double length, double width)
    {
        this.length = length;
        this.width = width;
    }

    public double ComputeArea()
    {
        return length * width;
    }
}

public class Circle : IShape
{
    private double radius;

    public Circle(double radius)
    {
        this.radius = radius;
    }

    public double ComputeArea()
    {
        return Math.Pow(radius, 2.0) * Math.PI;
    }
}

他們每個人都有自己的區域定義,但兩者都是形狀。因此,在我們的計劃中將它們視為 IShape 是合乎邏輯的:

private static void Main(string[] args)
{
    var shapes = new List<IShape>() { new Rectangle(5, 10), new Circle(5) };
    ComputeArea(shapes);

    Console.ReadKey();
}

private static void ComputeArea(IEnumerable<IShape> shapes) 
{
    foreach (shape in shapes)
    {
        Console.WriteLine("Area: {0:N}, shape.ComputeArea());
    }
}

// Output:
// Area : 50.00
// Area : 78.54