Ошибка документации MSDN? «Если процедура Shared, все ее локальные переменные автоматически становятся общими. Сюда входят статические переменные». - PullRequest
2 голосов
/ 13 марта 2012

Я просматривал документацию MSDN по малоиспользуемому ключевому слову VB.Net Static для локальных переменных.У меня вопрос , а не о том, как работает Static (лично я планирую избегать его использования, поскольку кажется, что это может вызвать горе у будущих программистов, которые не замечают побочных эффектов). Мой вопрособ этом утверждении в документах :

Поведение любой локальной переменной зависит от того, объявлена ​​ли она в общей процедуре.Если процедура Shared, все ее локальные переменные автоматически становятся общими.Это включает в себя статические переменные.Существует только одна копия такой переменной для всего приложения.

Похоже, это означает, что все локальные переменные в Shared Sub будут вести себя как статические переменные - они будут сохранять свои значениячерез отдельные звонки.Но я знал, что это не так, и я написал небольшую тестовую программу, чтобы доказать это:

Class TestSharedSub

    Shared Sub Main()
        Test()
        Test()
        Test()
        Console.Write("Press any key to continue...") : Console.ReadKey()
        ' Output:
        ' 1, 1
        ' 2, 1
        ' 3, 1
    End Sub

    Shared Sub Test()
        Dim iNormal As Integer
        Static iStatic As Integer
        iNormal += 1
        iStatic += 1
        Console.WriteLine(iStatic & ", " & iNormal)
    End Sub

End Class

Так может ли кто-нибудь истолковать приведенное выше утверждение для меня таким образом, который имеет смысл?Или это ошибка в документации?Он был там с версии документации VS 2005 и до сих пор присутствует в версии Visual Studio 11.

Ответы [ 2 ]

3 голосов
/ 13 марта 2012

Эта конкретная часть документации неверна. Локальные переменные, объявленные в методе Shared, ничем не отличаются от локальных переменных, объявленных в необщем методе. Единственная разница в поведении для местных жителей заключается в том, что они объявлены с модификатором Static.

Я сообщу об этом соответствующей команде.

РЕДАКТИРОВАТЬ

Команда, отвечающая за документацию, была предупреждена и будет исправлять документацию в самое ближайшее время.

3 голосов
/ 13 марта 2012

Нет, это чепуха. В следующем параграфе он по-прежнему полностью нарушен:

Если процедура не Shared, ее локальные переменные являются переменными экземпляра.

Локальные переменные не являются переменными экземпляра ...

Кто бы ни писал эту страницу, он вообще не понимает локальные переменные. Бог знает, что они сделают из рекурсии. Имейте в виду, это начинается разумно:

Обычно локальная переменная в процедуре перестает существовать, как только процедура останавливается.

... но это утверждение явно противоречит последним. Вздох.

Я предлагаю вам сообщить об ошибке на Connect .

...