Зачем нужны интерфейсы? - C# (183759)

Узнай цену своей работы

Формулировка задачи:

Не могу понять, зачем нужны интерфейсы? Зачем нам создавать интерфейс и наследоваться затем от него, если потом нам всё равно нужно,

заново писать сигнатуру метода

?? Вот допустим код с 2 интерфейсами и кучей методов, но смысл от интерфейсов, если когда их закомментируешь, результат тот же?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    // Создаем два интерфейса, описывающих абстрактные методы 
    // арифметических операций и операций Sqrt и Sqr
    public interface IArOperation
    {
        // Определяем набор абстрактных методов
        int Sum();
        int Otr();
        int Prz();
        int Del();
    }
 
    public interface ISqrSqrt
    {
        int Sqr(int x);
        int Sqrt(int x);
    }
 
    // Данный класс реализует интерфейс IArOperation
    class A : IArOperation
    {
        int My_x, My_y;
 
        public int x
        {
            set { My_x = value; }
            get { return My_x; }
        }
 
        public int y
        {
            set { My_y = value; }
            get { return My_y; }
        }
 
        public A() { }
        public A(int x, int y)
        {
            this.x = x;
            this.y = y;
        }
 
        // Реализуем методы интерфейса
        public virtual int Sum()
        {
            return x + y;
        }
 
        public int Otr()
        {
            return x - y;
        }
 
        public int Prz()
        {
            return x * y;
        }
 
        public int Del()
        {
            return x / y;
        }
 
        // В данном классе так же можно реализовать собственные методы
        public virtual void rewrite()
        {
            Console.WriteLine("Переменная x: {0}\nПеременная y: {1}",x,y);
        }
    }
 
    // Данный класс унаследован от класса А, но при этом в нем не нужно
    // заново реализовывать интерфейс, но при этом можно переопределить
    // некоторые его методы
    class Aa : A
    {
        public int z;
 
        public Aa(int z, int x, int y)
            : base(x, y)
        {
            this.z = z;
        }
 
        // Переопределим метод Sum
        public override int Sum()
        {
            return base.x + base.y + z;
        }
 
        public override void rewrite()
        {
            base.rewrite();
            Console.WriteLine("Переменная z: " + z);
        }
    }
 
    // Данный класс унаследован от класса А, и при этом
    // реализует интерфейс ISqrSqrt
    class Ab : A, ISqrSqrt
    {
        public int Sqr(int x)
        {
            return x * x;
        }
 
        public int Sqrt(int x)
        {
            return (int)Math.Sqrt((double)(x));
        }
    }
 
    class Program
    {
        static void Main()
        {
            A obj1 = new A(x: 10, y: 12);
            Console.WriteLine("obj1: ");
            obj1.rewrite();
            Console.WriteLine("{0} + {1} = {2}",obj1.x,obj1.y,obj1.Sum());
            Console.WriteLine("{0} * {1} = {2}", obj1.x, obj1.y, obj1.Prz());
            Aa obj2 = new Aa(z: -3, x: 10, y: 14);
            Console.WriteLine("\nobj2: ");
            obj2.rewrite();
            Console.WriteLine("{0} + {1} + {3} = {2}", obj2.x, obj2.y, obj2.Sum(), obj2.z);
 
            Console.ReadLine();
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    // Создаем два интерфейса, описывающих абстрактные методы 
    // арифметических операций и операций Sqrt и Sqr
    //public interface IArOperation
    //{
    //    // Определяем набор абстрактных методов
    //    int Sum();
    //    int Otr();
    //    int Prz();
    //    int Del();
    //}
 
    //public interface ISqrSqrt
    //{
    //    int Sqr(int x);
    //    int Sqrt(int x);
    //}
 
    // Данный класс реализует интерфейс IArOperation
    class A // : IArOperation
    {
        int My_x, My_y;
 
        public int x
        {
            set { My_x = value; }
            get { return My_x; }
        }
 
        public int y
        {
            set { My_y = value; }
            get { return My_y; }
        }
 
        public A() { }
        public A(int x, int y)
        {
            this.x = x;
            this.y = y;
        }
 
        // Реализуем методы интерфейса
        public virtual int Sum()
        {
            return x + y;
        }
 
        public int Otr()
        {
            return x - y;
        }
 
        public int Prz()
        {
            return x * y;
        }
 
        public int Del()
        {
            return x / y;
        }
 
        // В данном классе так же можно реализовать собственные методы
        public virtual void rewrite()
        {
            Console.WriteLine("Переменная x: {0}\nПеременная y: {1}", x, y);
        }
    }
 
    // Данный класс унаследован от класса А, но при этом в нем не нужно
    // заново реализовывать интерфейс, но при этом можно переопределить
    // некоторые его методы
    class Aa : A
    {
        public int z;
 
        public Aa(int z, int x, int y)
            : base(x, y)
        {
            this.z = z;
        }
 
        // Переопределим метод Sum
        public override int Sum()
        {
            return base.x + base.y + z;
        }
 
        public override void rewrite()
        {
            base.rewrite();
            Console.WriteLine("Переменная z: " + z);
        }
    }
 
    // Данный класс унаследован от класса А, и при этом
    // реализует интерфейс ISqrSqrt
    class Ab : A//, ISqrSqrt
    {
        public int Sqr(int x)
        {
            return x * x;
        }
 
        public int Sqrt(int x)
        {
            return (int)Math.Sqrt((double)(x));
        }
    }
 
    class Program
    {
        static void Main()
        {
            A obj1 = new A(x: 10, y: 12);
            Console.WriteLine("obj1: ");
            obj1.rewrite();
            Console.WriteLine("{0} + {1} = {2}", obj1.x, obj1.y, obj1.Sum());
            Console.WriteLine("{0} * {1} = {2}", obj1.x, obj1.y, obj1.Prz());
            Aa obj2 = new Aa(z: -3, x: 10, y: 14);
            Console.WriteLine("\nobj2: ");
            obj2.rewrite();
            Console.WriteLine("{0} + {1} + {3} = {2}", obj2.x, obj2.y, obj2.Sum(), obj2.z);
 
            Console.ReadLine();
        }
    }
}
Как для новичка, я тут вижу лишь лишний код, хз для чего :\

Решение задачи: «Зачем нужны интерфейсы?»

textual
Листинг программы
class Person
{
   public string FirstName { get; private set; }
   public string LastName { get; private set; }
 
   public Person(string firstName, string lastName)
   {
      FirstName = firstName;
      LastName = lastName;
   }
}
 
class FirstNameComparer<Person>
{
   public int Compare(Person a, Person b)
   {
      return a.FirstName.CompareTo(b.FirstName);
   }
}
 
class LastNameComparer<Person>
{
   public int Compare(Person a, Person b)
   {
      return a.LastName.CompareTo(b.LastName);
   }
}
 
var people = new List<Person>
{
   new Person("Вася", "Пупкин"),
   new Person("Володя", "Путкин")
};
 
people.Sort(new FirstNameComparer());
people.Sort(new LastNameComparer());

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.286 из 5