2010-10-20 17 views
1

J'ai un objet, à savoir "serveur" qui perd son existence lorsque le contrôle du programme est hors de portée.Portée en C#, que se passe-t-il en cas d'appel de fonction? L'étendue est-elle perdue?

Donc, en général pour de tels objets, et la mémoire des objets, lorsqu'une fonction est appelée depuis une portée, l'objet est-il perdu?

comme

void main void 
{ 
    if this and that 
    { //scope 
     do this 
     call_func(); 
    } 
}//main ends 


void call_func() 
{ 
    working 
    "utilise objects created in parent." 
    return; 
} 

call_func ne sera pas en mesure de voir ce qui est créé par la fonction parent? Oui ? ou pas?

Répondre

1

En règle générale, l'étendue dure entre les accolades. Tout ce qui est dans call_func a donc sa propre portée, complètement séparée de la fonction parente.

Lorsque le contrôle revient à la fonction parente, les objets qui étaient dans la portée avant d'appeler la fonction sont toujours dans la portée de tout ce qui se trouve entre les parenthèses.

La méthode enfant a uniquement accès aux objets qui se trouvent dans la classe parent. Les objets définis dans la méthode parent ne sont disponibles que s'ils sont spécifiquement transmis (en tant que paramètres) à l'enfant.

class testClass 
{ 
    private int classLevelInt; 

    private void Main() 
    { 
     int methodLevelInt; 

     if (someTest) 
     { 
      int bracketLevelInt; 

      // classLevelInt, methodLevelInt and bracketLevelInt all in scope 
      ChildMethod(); 
      // classLevelInt, methodLevelInt and bracketLevelInt all in scope 
     } 

     // only classLevelInt and methodLevelInt are still in scope 
    } 

    private void ChildMethod() 
    { 
     // This method can see classLevelInt only 
     // If access to other ints is required they must be passed to the method 
    } 
} 
+0

Est-ce que votre réponse signifie que la fonction call_func ne sera pas capable de voir ce qui a été créé par la fonction parente? – user287745

+0

si c'est déjà mentionné dans votre réponse je ne peux pas comprendre .. – user287745

+0

@user. La méthode enfant ne peut voir que les objets de la classe * parent * (pas la méthode), ainsi que les objets spécifiquement transmis à la méthode enfant – PaulG

1

call_func ne sera pas en mesure de voir ce qui est créé par la fonction parent? Oui ? ou pas?

Imaginez ce scénario:

void ParentMethod1() 
{ 
object something1; 
call_func(); 
} 

void ParentMethod2() 
{ 
object somethingdifferent1; 
call_func(); 
} 

void call_func() 
{ 
    object scopeObject; 
} 

Quels objets pensez-vous devrait être disponible à call_func?

Que se passe-t-il si call_func est public et appelé à partir d'un assemblage complètement différent? Fondamentalement, une fonction (méthode) peut uniquement accéder à toutes les variables créées à l'intérieur, lui sont passées en tant que paramètres ou disponibles en tant que variables de niveau classe.