J'utilise beaucoup l'héritage, le polymorphisme et l'encapsulation, mais je viens de réaliser que je ne connaissais pas le comportement suivant concernant la portée d'un objet par rapport à une variable. La différence est mieux représenté avec le code:C# Portée des variables vs objets lors du paramétrage dans les méthodes
public class Obj
{
public string sss {get; set;}
public Obj()
{
sss = "0";
}
}
public partial class testScope : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Obj a = new Obj();
String sss = "0";
Context.Response.Write(sss); // 0
FlipString(sss);
FlipString(a.sss);
Context.Response.Write(sss + a.sss); // 0 0
FlipObject(a);
Context.Response.Write(a.sss); // 1
Context.Response.End();
}
public void FlipString(string str)
{ str = "1"; }
public void FlipObject(Obj str)
{ str.sss = "1"; }
}
Je pensais que quand une variable est passée dans une méthode que les changements sont limités à la portée de la méthode. Mais il semble que si un objet est passé dans une méthode qui change à ses propriétés s'étendent au-delà de la méthode.
Je pourrais accepter ceci si la règle était que ce comportement existe pour l'objet et pas les variables mais dans. Net tout est un objet, une chaîne (comme celle dans l'exemple est System.String) Donc quelle est la règle, comment puis-je prédire la portée d'un paramètre que je passe dans une méthode?
merci jon, je vais être sûr d'accepter la réponse plus tard dans la journée plutôt que tôt pour max rep :) – rizzle
LOL: Je ne m'inquiéterais pas à ce sujet - ce n'est pas un gros problème. Une meilleure réponse peut très bien venir. –
+1 sur la mention d'un sujet qui devient trop peu de discussion. – jro