Looking for c# Keywords? Try Ask4Keywords

C# Language Неявный тип вывода (методы)


пример

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

Рассмотрим следующий общий метод. Он имеет один формальный параметр и один общий параметр типа. Между ними существует очень очевидная взаимосвязь: тип, переданный как аргумент параметру generic type, должен быть таким же, как тип времени компиляции аргумента, переданного формальному параметру.

void M<T>(T obj)
{
}

Эти два вызова эквивалентны:

M<object>(new object());
M(new object());

Эти два вызова также эквивалентны:

M<string>("");
M("");

И вот эти три звонка:

M<object>("");
M((object) "");
M("" as object);

Обратите внимание: если хотя бы один аргумент типа не может быть выведен, то все они должны быть указаны.

Рассмотрим следующий общий метод. Первый общий аргумент типа совпадает с типом формального аргумента. Но для второго аргумента типа типа нет таких отношений. Поэтому компилятор не может вывести второй аргумент типа общего типа при любом вызове этого метода.

void X<T1, T2>(T1 obj)
{
}

Это больше не работает:

X("");

Это тоже не работает, потому что компилятор не уверен, указываем ли мы первый или второй общий параметр (оба будут действительными как object ):

X<object>("");

Мы должны вывести оба из них, например:

X<string, object>("");