Применение интерфейса - C#

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

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

есть код
public class Product {
public int ProductID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public decimal Price { get; set; }
public string Category { set; get; }
}
public interface IValueCalculator {
decimal ValueProducts(params Product[] products);
}
public class LinqValueCalculator : IValueCalculator {
public decimal ValueProducts (params Product[] products) {
return products.Sum (p => p.Price); }
}
public class ShoppingCart
{
    private IValueCalculator calculator;
    public ShoppingCart(IValueCalculator calcParam)
    {
        calculator = calcParam;
    }
    public decimal CalculateStockValue()
    {
        // Определение набора товаров для суммирования
        Product[] products = {
   new Product () { Name = "Kayak", Price = 275M},
    new Product() { Name = "Lifejacket", Price = 48.95M },
     new Product () { Name = "Soccer ball", Price = 19.50M },
      new Product () { Name = "Stadium", Price = 79500M }
   };
        // Вычисление общей стоимости товаров
        decimal totalValue = calculator.ValueProducts(products);
        // Возврат результата
        return totalValue;
        
    }
}
17-22, 32 строчки. Объясните плиз, зачем нам создавать calculator типа IValueCalculator ( что нам это даёт ? ) и зачем создавать public ShoppingCart, который берёт в качестве параметра любой объект типа IValueCalculator, если мы его нигде не используем. Судя по логике кода, мы Интерфейсу присвоили значение объекта интерфейса, как так? как по имени calculator мы вызвали в нем метод ValueProduct? почему нельзя было вместо calculator просто использовать "IValueCalculator"? если они оба одного и того же типа

Решение задачи: «Применение интерфейса»

textual
Листинг программы
    interface IFlyBehaviour
    {
        void Fly();
    }
 
    class DefaultFlyBehaviour : IFlyBehaviour
    {
        public void Fly()
        {
            Console.WriteLine("I CAN FLY!!!");
        }
    }
 
    class PenguinFlyBehaviour : IFlyBehaviour
    {
        public void Fly()
        {
            Console.WriteLine("I CAN'T FLY!!!");
        }
    }
 
    class TurkeyFlyBehaviour : IFlyBehaviour
    {
        public void Fly()
        {
            Console.WriteLine("I CAN FLY ON SHORT DISTANCE!!!");
        }
    }
 
    class Bird
    {
        public readonly string Name;
        private readonly IFlyBehaviour flyBehaviour;
 
        public Bird(string name, IFlyBehaviour flyBehaviour)
        {
            Name = name;
            this.flyBehaviour = flyBehaviour;
        }
 
        public Bird(string name) : this(name, new DefaultFlyBehaviour())
        {
            
        }
 
        public void Fly()
        {
            flyBehaviour.Fly();
        }
    }

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


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

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

5   голосов , оценка 4 из 5
Похожие ответы