In C#, esiste un modo per inserire una variabile statica in un metodo come VB.Net?Variabili statiche in C#
Static myCollection As Collection
In C#, esiste un modo per inserire una variabile statica in un metodo come VB.Net?Variabili statiche in C#
Static myCollection As Collection
Perché C# non supporta il metodo statico variabili?
Q: In C++, è possibile scrivere un metodo statico variabile , e avere una variabile che si può accedere solo dall'interno del metodo. C# non fornire questa funzionalità. Perché?
A: Ci sono due motivi per cui C# non ha questa caratteristica.
primo luogo, è possibile ottenere quasi lo stesso effetto avendo un livello di classe statico, e aggiungendo metodo statica richiederebbero maggiore complessità.
In secondo luogo, statica a livello di metodo sono in qualche modo noti per causare problemi quando il codice viene chiamato ripetutamente o da più thread, e dal momento che le definizioni sono nelle metodi, è più difficile trovare le definizioni.
La cosa più vicina a VB.NET di Static
è quello di creare un campo nel tipo di corrente. Oltre a questo C# non ha equivalenti.
No, CLR non supporta questo e VB.NET ricorre a trucchi del compilatore per consentirlo. Ugh.
Se non ti piacciono i trucchi del compilatore, usi la parola chiave "rendimento" in C#? –
Come è un trucco del compilatore? È solo una variabile membro che ha una visibilità ridotta. –
Non uso mai la resa. Vorrei i metodi a variabili statiche anche se – rotard
No non c'è, ma come è questa differente allora avendo una variabile statica a livello di classe?
Actually if you look nella modalità di condivisione, è un trucco del compilatore che crea un campo statico sulla classe.
Sì, è esattamente come avere uno a livello di classe. È consentito solo dichiararlo a livello di metodo poiché la parola chiave statica di VB legacy significa che il valore di un locale dovrebbe persistere dopo la funzione/sub-ritorno. – x0n
È diverso perché il "trucco del compilatore" di VB usa anche la classe monitor per assicurarsi che sia thread-safe, e poiché è un metodo per l'ambito in modo tale che l'accesso altrove fallirà (semantica migliore). –
Esegue il solo ambito perché il nome del metodo viene utilizzato per denominare la variabile. E presumerei che se lo volessi a prova di codice in C# avresti implementato anche un monitor. Preferisco vedere C# implementare un thread statico sicuro che avvolge l'accesso alla variabile come fanno in VB, ma non preoccuparti dell'ambito di un metodo. – JoshBerke
Sono abbastanza sicuro che il C# è equivalente const
: quindi:
public const Collection myCollection = new Collection();
Io non sono troppo familiarità con VB.NET, quindi potrebbe essere fuori dalla base, ma che vi permetterà di impostare una variabile che non può essere cambiato.
variabili statiche non sono costanti. Una variabile statica è una variabile in cui ogni istanza della classe condivide la stessa istanza variabile. La variabile è mutabile e una modifica al valore in una classe cambierà il valore in tutte le altre istanze di quella classe. – NerdFury
Leggera correzione. Una variabile statica in C# è condivisa. In VB una variabile statica è condivisa solo se la funzione di contenimento è condivisa. –
> "famigerato per causare problemi quando il codice viene chiamato ripetutamente o da più thread" - Divertente, perché l'implementazione VB.Net è considerata come thread-safe. –
Thread-safe e fare ciò che si aspecifica sono due cose diverse ... –
Come è stato ottenuto Checked come la migliore risposta. La risposta è semplicemente NO. Si dice, ma ancora un no. La risposta fornita qui che è una citazione di Eric Gunnerson è il cop-out di Mircosoft. È utile semplice come quello. BTW, Java ha avuto questa capacità da almeno 1.2 e C++ per tutto il tempo che posso ricordare. Si potrebbe pensare che un linguaggio che mescola C++, Java e VB sostenga le cose che tutti e tre avevano in comune.Se tre lingue supportano questo, ci deve essere una buona ragione, e lasciarlo cadere con quei due motivi è zoppo e ovviamente stanno nascondendo qualcosa. –