Можете ли вы объяснить, что такое утиная типизация в C# на примере использования интерфейсов?

Можете ли вы, пожалуйста, объяснить концепцию утиной типизации с использованием кода, основанного на интерфейсах? Я прочитал его определение и нашел примеры в Интернете, но столкнулся с трудностями в попытке его понять и применять в своем коде.
Изображение к вопросу
  • 3 декабря 2023 г. 10:29
Ответы на вопрос 1
Утиная типизация или Duck Typing - это концепция в программировании, которая гласит: "Если что-то выглядит как утка, плавает как утка и крякает как утка, то это, вероятно, и есть утка." В контексте типизации это означает, что мы более заботимся о поведении объекта, чем о его собственно типе.

Для языков программирования, таких как C#, которые не поддерживают утиную типизацию напрямую, мы можем использовать интерфейсы для достижения подобного поведения.

Предположим, у нас есть разные классы "Duck" и "Human". Оба класса могут "говорить" и "ходить", но они различаются по своему типу. 

Рассмотрим следующий код:

```csharp
interface ICanTalkAndWalk
{
   void Talk();
   void Walk();
}

class Duck : ICanTalkAndWalk
{
   public void Talk()
   {
      Console.WriteLine("Дррнь-дррнь");
   }

   public void Walk()
   {
      Console.WriteLine("Утка идет");
   }
}

class Human : ICanTalkAndWalk
{
   public void Talk()
   {
      Console.WriteLine("Привет, я человек");
   }

   public void Walk()
   {
      Console.WriteLine("Человек идет");
   }
}
```

В вышеупомянутом коде у нас есть "ICanTalkAndWalk" интерфейс и два класса "Duck" и "Human", которые реализуют этот интерфейс. Мы можем вызвать методы Talk() и Walk() от объекта ICanTalkAndWalk, независимо от того, является ли он уткой или человеком. Это упрощает работу кода с различными типами объектов, которые обладают одинаковым поведением.

```csharp
void DoSomething(ICanTalkAndWalk entity)
{
   entity.Talk();
   entity.Walk();
}

//...
Duck duck = new Duck();
Human human = new Human();

DoSomething(duck); // Drrn-drrn, Duck is walking.
DoSomething(human); // Hi, I am a human. Human is walking.
```

Это приближает нас к идее утиной типизации - мы можем оперировать объектами, интуитивно ориентируясь на их поведение, смягчая свою зависимость от строгих типов.
Похожие вопросы