Я читаю некоторые образцы 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 # не позволяет это. Есть ли конкретная причина почему? Похоже, это было бы идеально в этой ситуации. Он ограничивает объем переменных к функции и только инициализирует его в первый раз. Даже если создание объекта дорогое, он будет выполнен только один раз. Так почему это не доступно? Или это?
Спасибо за чтение!