Что ж, вы подобрали важную идею - что чрезмерное использование var может быть действительно вредным, и что в случаях, когда фактический тип довольно прост, его следует указывать так.
var светит, однако, когдаработа с большими иерархиями наследования и шаблонами.Вы также можете прочитать его как «Мне все равно - просто дайте мне данные» Хотя шаблоны в C # не обладают выразительной силой своего аналога C ++, они обладают большей выразительной силой, чем дженерики Java, и это означает, что люди могутСоздавайте конструкции, которые не просто неудобны, но и сложны для локации, если вам необходимо четко указать точный тип.
Например, представьте шаблонную оболочку вокруг нескольких типов DataReader-ов для общения с SQL - так что вы все еще можете быть эффективными (вызывать sproc, получать результаты, выполнено), но без бремени обслуживания (закрытиесчитыватель и подключение, повторные попытки или ошибки и т. д.).Код, который использует его, будет просто вызывать одну функцию, сделанную так, чтобы иметь как можно более короткий синтаксис, и он будет возвращать оболочку, которая будет действовать как интеллектуальный указатель в C ++ - действовать как DataReader для вашего кода, но также обрабатывать все побочные эффекты.Так что это выглядит так просто:
using (var r = S.ExecuteReader("[MySproc]", params))
{
while ((+r).Read())
(
// get my data and be done
)
} // at this point wrapper cleans up everything
В таком случае, не только то, что вам не важно, как называется и объявлена оболочка, вам даже не важно знать, как это имя - дляваш код не имеет значения.Вы просто хотите получить свои проклятые данные и продолжать :-), не обращаясь к чьим-либо длинным объявлениям.
Буквально позволяет вам выбирать, когда вам небезразлично полное объявление типа, а когда нет. Это не все или ничего, и вы обнаружите, что используете оба стиля.
Еще одно место, где вы будете рады получить его, - это лямбда-выражения, если вы начнете их использовать.Если вы используете лямбда-выражения в C #, это почти всегда происходит потому, что вам нужен какой-то короткий, компактный код, который будет запускаться один раз, и не стоит тратить время на превращение в обычный метод, или это зависит от локальных переменных из метода host.
Да, и даже редактор VS выведет для вас полный тип, предложит автозаполнение и будет жаловаться, если вы попытаетесь использовать то, что он не может сделать, так что var вообще не нарушает безопасность типов (новый C ++ получил свой эквивалентный varтак же - давно пора).