Skip to content

Instantly share code, notes, and snippets.

@sunmeat
Last active January 23, 2026 10:00
Show Gist options
  • Select an option

  • Save sunmeat/41d156bd5bd74cf7acac281a267ec5d0 to your computer and use it in GitHub Desktop.

Select an option

Save sunmeat/41d156bd5bd74cf7acac281a267ec5d0 to your computer and use it in GitHub Desktop.
solving #1 (interfaces)
using System.Text;
namespace DuckInterfaces
{
// абстрактна качка
internal abstract class Duck
{
public virtual void Swim()
{
Console.WriteLine("качка плаває!");
}
// абстрактний метод — кожна качка відображається по-своєму
public abstract void Display();
}
// інтерфейс для тих, хто вміє літати
internal interface Flyable
{
void Fly();
}
// інтерфейс для тих, хто вміє крякати
internal interface Quackable
{
void Quack();
}
// крижнева качка — літає і крякає
internal class MallardDuck : Duck, Flyable, Quackable
{
public override void Display()
{
Console.WriteLine("крижнева_качка.jpg");
}
public void Fly()
{
Console.WriteLine("дика качка летить!");
}
public void Quack()
{
Console.WriteLine("дика качка крякає!");
}
}
// гумова качка — тільки крякає (по-своєму)
internal class RubberDuck : Duck, Quackable
{
public override void Display()
{
Console.WriteLine("гумова_качка.jpg");
}
public void Quack()
{
Console.WriteLine("пі-і-іп!");
}
}
internal static class Program
{
private static Duck GetSomeDuck()
{
return Random.Shared.Next(2) == 0 ? new RubberDuck() : new MallardDuck();
}
private static Quackable GetSomeQuackableDuck()
{
return Random.Shared.Next(2) == 0 ? new RubberDuck() : new MallardDuck();
}
private static void Main()
{
Console.OutputEncoding = Encoding.UTF8;
Console.WriteLine("Рішення #1");
Duck duck = GetSomeDuck();
duck.Swim(); // є у всіх підтипів
duck.Display();
Quackable q = GetSomeQuackableDuck();
q.Quack(); // доступний тільки метод крякання через інтерфейс
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment