Почему C # не допускает глобальные выведенные типы, то есть используя var? - PullRequest
1 голос
/ 08 апреля 2010

Я знаю, что это не может быть сделано, так как использование var может быть сделано только для локальных переменных.Мне просто интересно, есть ли у кого-то теория, почему команда C # думала, что это должно быть так.например, что было бы не так с этим:

public class SomeClass
{
    var someString = "hello"; //not cool
    public SomeClass()
    {
        var someOtherString = "hello"; //cool
    }
}

Если инициализирован someString, то это, очевидно, строка, такая же как someOtherString.Почему существует одно правило для локальных переменных, а другое - для глобальных?

Ответы [ 2 ]

4 голосов
/ 08 апреля 2010

Дубликат, следовательно, CW.

См. Сообщение Эрика Липперта :

Позвольте мне дать вам краткое упрощение работы компилятора C #.Сначала мы просматриваем каждый исходный файл и выполняем анализ «только верхнего уровня».То есть мы идентифицируем каждое пространство имен, класс, структуру, перечисление, интерфейс и объявление типа делегата на всех уровнях вложенности.Мы анализируем все объявления полей, объявления методов и так далее.Фактически, мы анализируем все, кроме тел методов;те, мы пропускаем и возвращаемся к ним позже.
[...]
если у нас есть поля "var", то тип поля не может быть определен, пока выражение не проанализировано, и это происходит после того, как мы уженужно знать тип поля.

1 голос
/ 08 апреля 2010

Это связано с количеством запросов, которые компилятор должен будет выполнить, чтобы определить тип.

...