È possibile rilasciare una variabile in c #?
-
22-07-2019 - |
Domanda
Sono solo curioso ...
È possibile rilasciare una variabile in c #?
Quello che voglio dire è, puoi fare qualcosa del genere:
...
string x = "billy bob";
//release variable x somehow
string x = "some other string";
//release variable x somehow
int x = 329;
...
... quindi sostanzialmente stai dichiarando la variabile più volte nello stesso ambito.
Se ciò non è possibile in c #, in quali lingue è possibile?
Soluzione
Puoi farlo con ambiti (termine generico; formalmente credo che questo sarebbe uno spazio di dichiarazione), ad es. quanto segue è C # perfettamente legale all'interno di un organismo del metodo:
{
string x = "billy bob";
}
{
string x = "some other string";
}
{
int x = 329;
}
Non consiglierei comunque di scrivere codice come questo, perché è troppo facile confondere le variabili in un metodo. Meglio usare nomi diversi, più descrittivi o separare ciascun blocco nel suo metodo.
Altri suggerimenti
No, questo non è possibile in C # nello stesso ambito, per il quale sono molto grato. Sembra una ricetta per il disastro della leggibilità. Come ha dimostrato Greg, è possibile introdurre i propri ambiti all'interno di un metodo solo a questo scopo.
Non so quali lingue ti permettono di farlo - le lingue debolmente tipizzate ti faranno spesso assegnare valori arbitrari, ma non conosco una lingua che abbia dichiarazioni variabili esplicite con informazioni sul tipo e consente anche una redeclaration nello stesso ambito.
Potresti leggere l'ultimo post sul blog di Eric Lippert, che è tutto sull'ambito . (Se non hai già letto il blog di Eric, potresti voler cancellare alcuni giorni nel tuo calendario e leggere tutti i post posteriori ... o almeno quelli da quando è entrato nel team C #. Preparati a farti saltare la testa più volte.)
puoi riutilizzare una stringa:
string x = "billy bob";
x = "some other string";
Perché dovresti voler fare questo?
Forse puoi farlo:
object x = "billy bob"
x = "some other string";
x = 329;
Quindi lanciarlo come preferisci?
Puoi riassegnare le variabili, ovviamente:
string s = "billy bob";
s = "something else";
Non puoi dichiarare nuovamente le variabili nello stesso ambito:
// This is illegal:
string s = "billy bob";
string s = "foo"
Poiché Object è la radice del sistema di tipi in .NET, puoi fare qualcosa del genere:
object o = "billy bob";
o = "foo";
o = 5;