Применение интерфейса - C#
Формулировка задачи:
есть код
17-22, 32 строчки.
Объясните плиз, зачем нам создавать calculator типа IValueCalculator ( что нам это даёт ? )
и зачем создавать public ShoppingCart, который берёт в качестве параметра любой объект типа IValueCalculator, если мы его нигде не используем. Судя по логике кода, мы Интерфейсу присвоили значение объекта интерфейса, как так?
как по имени calculator мы вызвали в нем метод ValueProduct? почему нельзя было вместо calculator просто использовать "IValueCalculator"? если они оба одного и того же типа
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;
}
}Решение задачи: «Применение интерфейса»
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();
}
}