У Джареда в ответе фантастическая ссылка на фантастическую тему.
Я думаю, что это не дает четкого ответа на вопрос.
Почему бы и нет?
var getFoo() {
return new Foo();
}
Причина этого:
Что если?
class Foo {}
var GetFoo() {
return GetBar();
}
var GetBar() {
return GetBaz();
}
var GetBaz() {
return new Foo();
}
Вы могли бы сделать вывод, что GetFoo
собирается вернуть Foo
, но вам придется проследить через все вызовы, которые совершает метод и его children только для вывода тип. В нынешнем виде компилятор C # не предназначен для такой работы. Он нуждается в методах и типах полей на ранних стадиях процесса, прежде чем код, который выводит типы, может быть запущен.
На чисто эстетическом уровне я нахожу, что определения переменных методов путают вещи. Это единственное место, где, как мне кажется, явное всегда помогает, оно защищает вас от выстрела в себя, случайно возвращая тип, который вызывает изменение вашей подписи и тонны других зависимых сигнатур методов. Хуже всего то, что вы могли бы потенциально изменить все свои сигнатуры цепочки методов, даже не подозревая, что сделали это, если вы вернете значение метода, который возвращает объект, и вам повезло.
Я думаю, что лучше использовать методы var для динамических языков, таких как Ruby