Я новичок в C# и изо всех сил пытаюсь понять использование и преимущества интерфейсов. Мне дали пример ниже (Пример 1), чтобы изучить использование интерфейса. Моя проблема в том, что программа работает и без интерфейса (Пример 2). Так в чем же преимущество интерфейса в этом примере?
Пример 1:
using System;
namespace ConsoleApp1
{
interface IShape
{
double Area();
double Perimeter();
}
class Circle : IShape
{
private double radius;
public Circle(double radius)
{
this.radius = radius;
}
public double Area()
{
return Math.PI * radius * radius;
}
public double Perimeter()
{
return 2 * Math.PI * radius;
}
}
class Rectangle : IShape
{
private double length;
private double width;
public Rectangle(double length, double width)
{
this.length = length;
this.width = width;
}
public double Area()
{
return length * width;
}
public double Perimeter()
{
return 2 * ( length + width );
}
}
class Program
{
static void Main(string[] args)
{
IShape circle = new Circle(5);
IShape rectangle = new Rectangle(10, 20);;
Console.WriteLine("Cirkelns area är {0}", circle.Area());
Console.WriteLine("Cirkelns omkrets är {0}", circle.Perimeter());
Console.WriteLine("Rektangelns area är {0}", rectangle.Area());
Console.WriteLine("Rektangelns omkrets är {0}", rectangle.Perimeter());
}
}
}
Пример 2:
using System;
namespace ConsoleApp1
{
class Circle
{
private double radius;
public Circle(double radius)
{
this.radius = radius;
}
public double Area()
{
return Math.PI * radius * radius;
}
public double Perimeter()
{
return 2 * Math.PI * radius;
}
}
class Rectangle
{
private double length;
private double width;
public Rectangle(double length, double width)
{
this.length = length;
this.width = width;
}
public double Area()
{
return length * width;
}
public double Perimeter()
{
return 2 * ( length + width );
}
}
class Program
{
static void Main(string[] args)
{
Circle circle = new Circle(5);
Rectangle rectangle = new Rectangle(10, 20);
Console.WriteLine("Cirkelns area är {0}", circle.Area());
Console.WriteLine("Cirkelns omkrets är {0}", circle.Perimeter());
Console.WriteLine("Rektangelns area är {0}", rectangle.Area());
Console.WriteLine("Rektangelns omkrets är {0}", rectangle.Perimeter());
}
}
}
Я изучил и сравнил два примера, чтобы попытаться понять, что делает интерфейс и почему я должен его использовать.
настоящие Маккои не используют интерфейсы.





Если вас интересует сумма площадей n фигур, вы не можете просто перебирать список смешанного содержимого, например List<Circle Or Rectangle>... поэтому просто используйте List<IShape>. Затем вы можете просто вызвать функции «area()» всего, что есть в этом списке, если оно реализует функцию интерфейса.
Спасибо, очень приятно знать, я уверен, что мне это пригодится в будущем.
Интерфейсы используются для того, чтобы сделать некоторые свойства или атрибуты обязательными.
Да, код будет работать без какого-либо интерфейса.
Но используя интерфейс, убедитесь, что все объекты реализуют необходимые атрибуты (свойства, функции и т. д.). Интерфейс требует обязательной реализации некоторых атрибутов, свойств или функций.
в вашем примере интерфейс используется для того, чтобы убедиться, что все ваши объекты (круг, прямоугольник) имеют функции площади и периметра.
Спасибо Виктор, это была важная информация!
Следующие материалы могут представлять интерес: Знакомство с интерфейсом класса и Интерфейсы — определение поведения для нескольких типов