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

2

Мне просто интересно...

Можно ли выпустить переменную в С#?

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

...
string x = "billy bob";

//release variable x somehow

string x = "some other string";

//release variable x somehow

int x = 329;
...

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

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

  • 8
    Почему ты хочешь?
  • 1
    Да, я имею в виду, помимо того, что повторное использование переменных сбивает с толку, почему бы вам просто не создать новую переменную?
Показать ещё 3 комментария
Теги:
scope
variables
declaration

4 ответа

16
Лучший ответ

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

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

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

  • 0
    Кажется, вы читали последнее сообщение в блоге Эрика Липперта;)
  • 0
    @ Томас - Действительно, у меня есть :-)
Показать ещё 1 комментарий
11

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

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

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

2

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

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

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

Возможно, вы можете сделать это:

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

Затем нарисуйте его, как вам нравится?

0

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

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;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню