Страницы

Поиск по вопросам

суббота, 21 декабря 2019 г.

Полиморфизм в c#

#c_sharp #ооп



  Из википедии:
  
  Параметрический полиморфизм позволяет определять функцию или тип
  данных обобщённо, так что значения обрабатываются идентично вне
  зависимости от их типа.


В C# параметрический полиморфизм реализуется с помощью generic'ов или нет? Может
кто объяснить?)
    


Ответы

Ответ 1



Да, вы правы. Дженерики -- один из механизмов параметрического полиморфизма в C#. Например, вам нужно вывести число элементов коллекции. Все, что вам нужно от параметра функции -- свойство Count. При этом фактический тип параметра неважен. Соответственно вы можете написать этот метод так: void PrintCountGeneric(T collection) where T : ICollection { Console.WriteLine(collection.Count); } ... var list = new List() { 1, 2 }; PrintCountGeneric(list); Еще есть вариант без использования дженериков: void PrintCount(ICollection collection) { Console.WriteLine(collection.Count); } ... var list = new List() { 1, 2 }; PrintCount(list);

Ответ 2



Примером может послужить ковариантность generic'ов. Взять хотя бы коллекцию List и интерфейс IEnumerable который она реализует. Благодаря параметрическому полиморфизму возможно такое неявное приведение типов : IEnumerable list = new List(); Другим примером может быть generic метод, которые возвращает "то, что принимает", его сигнатурой может быть что-то вроде : T MyMethod(T value); Тип возвращаемых данных будет изменяться каждый раз при передаче экземпляра...

Комментариев нет:

Отправить комментарий