Created
May 27, 2024 09:17
-
-
Save sunmeat/41d156bd5bd74cf7acac281a267ec5d0 to your computer and use it in GitHub Desktop.
solving #1 (interfaces)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
abstract class Duck // абстрактная утка | |
{ | |
public virtual void Swim() | |
{ | |
Console.WriteLine("утка плавает!"); | |
} | |
public abstract void Display(); // метод абстрактный, так как все утки будут отображаться по-разному | |
} | |
interface Flyable | |
{ | |
void Fly(); | |
} | |
interface Quackable | |
{ | |
void Quack(); | |
} | |
class MallardDuck : Duck, Flyable, Quackable | |
{ | |
public override void Display() | |
{ | |
Console.WriteLine("mallard.jpg"); | |
} | |
public void Fly() | |
{ | |
Console.WriteLine("дикая утка летит!"); | |
} | |
public void Quack() | |
{ | |
Console.WriteLine("дикая утка крякает!"); | |
} | |
} | |
class RubberDuck : Duck, Quackable | |
{ | |
public override void Display() | |
{ | |
Console.WriteLine("rubberduck.jpg"); | |
} | |
public void Quack() | |
{ | |
Console.WriteLine("пиип-пииип!"); | |
} | |
} | |
static class Program | |
{ | |
static Duck GetSomeDuck() | |
{ | |
var rand = new Random(100); | |
if (rand.Next(2) == 0) | |
return new RubberDuck(); | |
return new MallardDuck(); | |
} | |
static Quackable GetSomeQuackableDuck() | |
{ | |
var rand = new Random(200); | |
if (rand.Next(2) == 0) | |
return new RubberDuck(); | |
return new MallardDuck(); | |
} | |
static void Main() | |
{ | |
Console.WriteLine("Решение #1"); | |
Duck duck = GetSomeDuck(); | |
duck.Swim(); // этот есть у всех подтипов | |
duck.Display(); // этот тоже есть, просто сейчас не вызывается | |
Quackable q = GetSomeQuackableDuck(); | |
q.Quack(); // доступен только такой метод для вызова через указатель типа Quackable | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment