Можно ли освободить переменную в C #? - PullRequest
2 голосов
/ 05 августа 2009

Мне просто любопытно ...

Можно ли освободить переменную в c #?

Я имею в виду, можете ли вы сделать что-то вроде этого:

...
string x = "billy bob";

//release variable x somehow

string x = "some other string";

//release variable x somehow

int x = 329;
...

... поэтому вы объявляете переменную несколько раз в одной и той же области видимости.

Если это невозможно в c #, на каких языках это возможно?

Ответы [ 4 ]

17 голосов
/ 05 августа 2009

Вы можете сделать это с помощью областей (свободный термин; формально я считаю, что это будет область объявления), например Следующее является абсолютно допустимым C # в теле метода:

{
    string x = "billy bob";    
}
{
    string x = "some other string";
}
{
    int x = 329;
}

Я бы не советовал писать такой код, поскольку слишком легко запутать переменные в методе. Лучше использовать разные, более описательные имена или разделить каждый блок на собственный метод.

11 голосов
/ 05 августа 2009

Нет, это не возможно в C # в той же области - за что я очень благодарен. Это звучит как рецепт для удобства чтения. Как показал Грег, вы можете использовать собственные методы в методе исключительно для этой цели.

Я не знаю, какие языки позволяют вам это делать - слабо типизированные языки часто позволяют вам назначать произвольные значения, конечно, но я не знаю языка, который имеет явные объявления переменных с информацией о типе , а также позволяет переопределение в той же области.

Возможно, вы захотите прочитать последнее сообщение Эрика Липперта в блоге, которое полностью посвящено области действия . (Если вы еще не читали блог Эрика, возможно, вы захотите очистить несколько дней в своем календаре и прочитать все предыдущие сообщения ... или, по крайней мере, те, с тех пор, как он присоединился к команде C #. несколько раз.)

2 голосов
/ 05 августа 2009

вы можете использовать строку:

string x = "billy bob";
x = "some other string";

Зачем вам это нужно?

Может быть, вы можете сделать это:

object x = "billy bob"
x = "some other string";
x = 329;

Тогда разыграй как хочешь?

0 голосов
/ 05 августа 2009

Можно, конечно, переназначить переменные:

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;
...