Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...
История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...
Топ:
История развития методов оптимизации: теорема Куна-Таккера, метод Лагранжа, роль выпуклости в оптимизации...
Теоретическая значимость работы: Описание теоретической значимости (ценности) результатов исследования должно присутствовать во введении...
Генеалогическое древо Султанов Османской империи: Османские правители, вначале, будучи еще бейлербеями Анатолии, женились на дочерях византийских императоров...
Интересное:
Влияние предпринимательской среды на эффективное функционирование предприятия: Предпринимательская среда – это совокупность внешних и внутренних факторов, оказывающих влияние на функционирование фирмы...
Как мы говорим и как мы слушаем: общение можно сравнить с огромным зонтиком, под которым скрыто все...
Финансовый рынок и его значение в управлении денежными потоками на современном этапе: любому предприятию для расширения производства и увеличения прибыли нужны...
Дисциплины:
|
из
5.00
|
Заказать работу |
Содержание книги
Поиск на нашем сайте
|
|
|
|
Выведенный тип возвращаемого значения анонимной функции F используется при выводе типа и разрешении перегрузки. Выведенный тип возвращаемого значения можно определить только для анонимной функции со всеми известными типами параметров, которые либо заданы явно и переданы через преобразование анонимной функции, либо выведены во время вывода типа для включающего вызова универсального метода.
Выведенный тип возвращаемого значения определяется следующим образом.
· Если телом F является выражение, имеющее тип, то результирующий выведенный тип F совпадет с типом этого выражения.
· Если телом F является блок, а самым подходящим общим типом для набора выражений в операторах return блока является T (§7.5.2.14), то выведенным типом результата F будет T.
· Иначе тип результата для F вывести нельзя.
Выведенный тип возвращаемого значения определяется следующим образом.
· Если F — асинхронная функция и тело F — выражение, классифицированное как Nothing (§7.1), или блок операторов, в котором операторы return не имеют выражений, выведенным типом возвращаемого значения является System.Threading.Tasks.Task
· Если функция F является синхронной и имеет выведенный тип возвращаемого значения T, выведенным типом возвращаемого значения будет System.Threading.Tasks.Task<T>.
· Если функция F не является синхронной и имеет выведенный тип возвращаемого значения T, выведенным типом возвращаемого значения будет T.
· Иначе тип возвращаемого значения для F вывести нельзя.
В качестве примера вывода типа, включающего анонимную функцию, рассмотрим метод расширения Select, объявленный в классе System.Linq.Enumerable:
namespace System.Linq
{
public static class Enumerable
{
public static IEnumerable<TResult> Select<TSource,TResult>(
this IEnumerable<TSource> source,
Func<TSource,TResult> selector)
{
foreach (TSource element in source) yield return selector(element);
}
}
}
Предположим, что пространство имен System.Linq было импортировано с помощью предложения using и свойство Name класса Customer имеет тип string. Тогда для выбора имен списка клиентов можно использовать метод Select:
List<Customer> customers = GetCustomerList();
IEnumerable<string> names = customers.Select(c => c.Name);
Вызов метода расширения (§7.6.5.2) для Select обрабатывается путем перезаписи вызова статического метода:
IEnumerable<string> names = Enumerable.Select(customers, c => c.Name);
Поскольку аргументы типа не были указаны явно, для получения аргументов типа используется вывод типа. Сначала аргумент customers связывается с параметром source, и для T выводится тип Customer. Затем, используя описанный выше процесс вывода типа анонимной функции, c присваивается тип Customer, а выражение c.Name связывается с типом возвращаемого значения параметра selector, в результате чего для S выводится тип string. Таким образом, этот вызов эквивалентен
Sequence.Select<Customer,string>(customers, (Customer c) => c.Name)
а результат имеет тип IEnumerable<string>.
В следующем примере демонстрируется, как вывод типа анонимной функции обеспечивает «перетекание» данных о типе между аргументами в вызове универсального метода. Если имеется метод:
static Z F<X,Y,Z>(X value, Func<X,Y> f1, Func<Y,Z> f2) {
return f2(f1(value));
}
Вывод типа при вызове:
double seconds = F("1:15:30", s => TimeSpan.Parse(s), t => t.TotalSeconds);
продолжается следующим образом: сначала аргумент "1:15:30" связывается с параметром value и для X выводится тип string. Затем параметру первой анонимной функции s присваивается выведенный тип string, а выражение TimeSpan.Parse(s) связывается с типом возвращаемого значения f1, в результате чего для Y выводится тип System.TimeSpan. И наконец, параметру второй анонимной функции t присваивается выведенный тип System.TimeSpan, а выражение t.TotalSeconds связывается с типом возвращаемого значения f2, в результате чего для Z выводится тип double. Таким образом, результат вызова имеет тип double.
7.5.2.13 Вывод типа при преобразовании групп методов
Аналогично вызовам универсальных методов вывод типа также должен применяться, когда группа методов M, включающая универсальный метод, преобразуется в данный тип делегата D (§6.6). Если имеется метод
Tr M<X1…Xn>(T1 x1 … Tm xm)
и группа методов M назначается типу делегата D, то задачей вывода типа является поиск аргументов типа S1…Sn, чтобы выражение:
M<S1…Sn>
оказалось совместимым (§15.1) с D.
В отличие от алгоритма вывода для вызовов универсальных методов, в данном случае имеются только типы аргументов, но не выражения аргументов. В частности, нет анонимных функций, следовательно, нет необходимости в нескольких этапах вывода.
Вместо этого все Xi считаются нефиксированными, и выполняется вывод по нижней границе из каждого типа аргумента Uj для D в соответствующий тип параметра Tj для M. Если для какого-либо Xi границы не были найдены, вывод типа завершается сбоем. Иначе все Xi фиксируются в соответствующие Si, которые являются результатом вывода типа.
|
|
|
Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...
Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...
Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...
Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
© cyberpediasu.com 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!