Почему C # не позволяет переменным быть объявленным статическим в методах?

Я читаю некоторые образцы AppHub Microsoft, и это начало одной из функций:

if (string.IsNullOrEmpty(textureFilename))
{
    string message = "textureFilename wasn't set properly, so the " +
        "particle system doesn't know what texture to load. Make " +
        "sure your particle system's InitializeConstants function " +
        "properly sets textureFilename.";
    throw new InvalidOperationException(message);
}

RESHARPER говорит, что делает это значение постоянным скорее Чем redeclaring его каждый раз. Тем не менее, это строковое значение используется только в этой функции, поэтому делает его переменной элементов, не должна быть необходима. В идеале, область переменной должна быть ограничена этой функцией. Верно?

Также я согласен С тому, кто собирается сказать «Поместите строку в файл ресурса». В этом случае, скорее всего, будет оптимальным решением. Не только это решает проблемы локализации, но также сохраняет переменную от переосмысления каждого вызова функции и больше не закуривают исходный файл. Тем не менее, это просто пример.

Я знаю, что многие, вероятно, собираются сказать что-то вдоль линий «преждевременной оптимизации, - это корень всего зла», но обратите внимание, что это просто пример , Что, если эта квазистанция переменная была сложной и повторной я Нициализируя каждый звонок приведет к заметному замедлению?

Visual Basic .NET позволяет программисту объявить переменные в функции в качестве статической. Например, в этом коде TestFunction будет вызываться только в первый раз, когда я щелкнул кнопку:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Static example As Integer = TestFunction()

    MessageBox.Show(example)
End Sub

Private Function TestFunction() As Integer
    Console.WriteLine("Method Accessed")

    Return 5
End Function

, насколько я знаю, C # не позволяет это. Есть ли конкретная причина почему? Похоже, это было бы идеально в этой ситуации. Он ограничивает объем переменных к функции и только инициализирует его в первый раз. Даже если создание объекта дорогое, он будет выполнен только один раз. Так почему это не доступно? Или это?

Спасибо за чтение!

0
задан Kyle Chowburry 8 September 2011 в 23:40
поделиться