Пытаюсь понять интерфейсы

Я новичок в 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());
        }
    }
}

Я изучил и сравнил два примера, чтобы попытаться понять, что делает интерфейс и почему я должен его использовать.

Следующие материалы могут представлять интерес: Знакомство с интерфейсом класса и Интерфейсы — определение поведения для нескольких типов

user246821 24.02.2024 22:56
Рекомендуемое чтение: а также есть существующий пост. Здесь буквально масса существующей информации. Это почти как если бы мы создавали базу данных полезной информации о программировании.
Ňɏssa Pøngjǣrdenlarp 25.02.2024 05:04

настоящие Маккои не используют интерфейсы.

Boppity Bop 25.02.2024 12:27
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
3
75
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Если вас интересует сумма площадей n фигур, вы не можете просто перебирать список смешанного содержимого, например List<Circle Or Rectangle>... поэтому просто используйте List<IShape>. Затем вы можете просто вызвать функции «area()» всего, что есть в этом списке, если оно реализует функцию интерфейса.

Спасибо, очень приятно знать, я уверен, что мне это пригодится в будущем.

thermia 25.02.2024 10:05

Интерфейсы используются для того, чтобы сделать некоторые свойства или атрибуты обязательными.

Да, код будет работать без какого-либо интерфейса.

Но используя интерфейс, убедитесь, что все объекты реализуют необходимые атрибуты (свойства, функции и т. д.). Интерфейс требует обязательной реализации некоторых атрибутов, свойств или функций.

в вашем примере интерфейс используется для того, чтобы убедиться, что все ваши объекты (круг, прямоугольник) имеют функции площади и периметра.

Спасибо Виктор, это была важная информация!

thermia 25.02.2024 10:03

Другие вопросы по теме