2010-06-27 22 views
12

Qui è un metodo di estensione insignificante come esempio:filettatura e statici metodi in C#

public static class MyExtensions 
{ 
    public static int MyExtensionMethod(this MyType e) 
    { 
     int x = 1; 
     x = 2; 

     return x 
    } 
} 

Dare un thread di esecuzione completa e fino compresa la linea:

x = 2; 

Il processore poi context switch e un altro thread immette lo stesso metodo e completa la riga:

int x = 1; 

Am I corrisponde ct assumendo che la variabile "x" creata e assegnata dal primo thread sia su uno stack separato alla variabile "x" creata e assegnata dal secondo, il che significa che questo metodo è rientrante?

risposta

14

Sì, ogni thread riceve la propria variabile locale separata. Questa funzione restituirà sempre 2 anche se chiamata da più thread contemporaneamente.

2

Sì, questa è una valutazione corretta. x è una variabile locale del metodo e non verrà condivisa tra le chiamate di MyExtensionMethod.

0

Molto semplicemente, sì. Un metodo statico significa solo che il metodo può essere chiamato senza un oggetto. Le variabili locali all'interno del metodo sono ancora locali.