#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); Тип возвращаемых данных будет изменяться каждый раз при передаче экземпляра...
Комментариев нет:
Отправить комментарий