2009-08-04 2 views
2

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

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

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

... 
string x = "billy bob"; 

//release variable x somehow 

string x = "some other string"; 

//release variable x somehow 

int x = 329; 
... 

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

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

+8

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

+1

Да, я имею в виду, кроме того, что повторное использование переменных запутывает, почему бы вам не просто создать новую переменную? –

+1

Вы можете выполнить операцию «литья» при изменении типа, если вы хотите пойти другим путем, например. взять int и преобразовать значение в строку для записи в файл или какое-либо другое устройство вывода. –

ответ

16

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

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

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

+0

Кажется, что вы прочитали последнее сообщение в блоге Эрика Липперта;) –

+0

@Thomas - Действительно у меня есть :-) –

+2

легально, но просто противно ... * eye stab * –

11

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

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

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

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" 

Поскольку объект является корнем системы типов в .NET, вы можете сделать что-то вроде этого:

object o = "billy bob"; 
o = "foo"; 
o = 5; 
Смежные вопросы