Potrebbe spiegare il seguente comportamento della classe C#. Mi aspetto che classResult sia "Class Lijo"; ma il valore attuale è "Modificato".lPassare in base al valore e passare per riferimento
Stiamo facendo una copia del riferimento. Sebbene la copia stia puntando allo stesso indirizzo, il metodo che riceve l'argomento non può cambiare l'originale.
Ancora perché il valore viene modificato?
public partial class _Default : Page
{
protected void Page_Load(object sender, EventArgs e)
{
String nameString = "string Lijo";
Person p = new Person();
p.Name = "Class Lijo";
Utilityclass.TestMethod(nameString, p);
string classResult = p.Name;
Response.Write(nameString + "....." + classResult);
}
}
public class Utilityclass
{
public static void TestMethod(String nameString, Person k)
{
nameString = "Changed";
k.Name = "Changed";
}
}
public class Person
{
public string Name
{
get; set;
}
}
Aggiornamento: Quando passa una stringa, non ottiene effettivamente cambiato.
Potrei suggerire di leggere l'eccellente articolo di [Mr Skeet sull'argomento] (http://www.yoda.arachsys.com/csharp/parameters.html). – Alconja
Anche se String è un oggetto, è immutabile, quindi quando passi una stringa il riferimento originale non viene modificato – trendl
Ho letto questo [articolo] (http://zuta-developer.blogspot.com/2012/06/net- parameter-passing.html) Questo articolo ti mostrerà come il passaggio dei parametri viene gestito in memoria. – Developex