Мне просто интересно...
Можно ли выпустить переменную в С#?
Что я имею в виду, можете ли вы сделать что-то вроде этого:
...
string x = "billy bob";
//release variable x somehow
string x = "some other string";
//release variable x somehow
int x = 329;
...
... так что в основном вы объявляете переменную несколько раз в той же области.
Если это невозможно в С#, на каких языках это возможно в?
Вы можете сделать это с помощью областей (свободный термин, формально я считаю, что это будет пространство декларации), например. следующее полностью законное С# внутри тела метода:
{
string x = "billy bob";
}
{
string x = "some other string";
}
{
int x = 329;
}
Я бы не советовал писать такой код, хотя, это слишком просто, чтобы заставить переменные запутаться в методе. Лучше использовать разные, более описательные имена или отделить каждый блок от своего собственного метода.
Нет, это невозможно в С# в той же области - за что я очень благодарен. Это звучит как рецепт для чтения. Как показал Грег, вы можете представить свои собственные области в рамках метода исключительно для этой цели.
Я не знаю, какие языки позволяют это сделать - слабо типизированные языки часто позволяют вам назначать произвольные значения, конечно, но я не знаю языка, который имеет явные объявления переменных с информацией о типе, а также позволяет повторная декларация в том же объеме.
Возможно, вы захотите прочитать последнее сообщение в блоге Eric Lippert, которое все о сфере видимости. (Если вы еще не читали блог Eric, вам может потребоваться очистить несколько дней в календаре и прочитать все предыдущие записи... или, по крайней мере, те, с которых он присоединился к команде С#. несколько раз.)
вы можете повторно использовать строку:
string x = "billy bob";
x = "some other string";
Зачем вам это нужно?
Возможно, вы можете сделать это:
object x = "billy bob"
x = "some other string";
x = 329;
Затем нарисуйте его, как вам нравится?
Вы можете переназначить переменные, конечно:
string s = "billy bob";
s = "something else";
Вы не можете переопределять переменные в той же области:
// This is illegal:
string s = "billy bob";
string s = "foo"
Так как Object является корнем системы типов в .NET, вы можете сделать что-то вроде этого:
object o = "billy bob";
o = "foo";
o = 5;