Könnten Sie bitte das folgende Verhalten der C# -Klasse erklären. Ich erwarte das classResult als "Class Lijo"; aber der tatsächliche Wert ist "geändert".lPass nach Wert & Pass by Referenz
Wir machen eine Kopie der Referenz. Obwohl die Kopie auf dieselbe Adresse verweist, kann die Methode, die das Argument erhält, das Original nicht ändern.
Noch warum der Wert geändert wird?
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;
}
}
aktualisieren: Wenn ich einen String übergeben, ist es nicht wirklich geändert hat bekommen.
Darf ich vorschlagen, dass ich [Mr. Skeets ausgezeichneten Artikel zu diesem Thema] gelesen habe (http://www.yoda.arachsys.com/csharp/parameters.html). – Alconja
Obwohl String ein Objekt ist, ist es unveränderlich. Wenn Sie also eine Zeichenfolge übergeben, wird die ursprüngliche Referenz nicht geändert. – trendl
Ich hatte dies gelesen [Artikel] (http://zuta-developer.blogspot.com/2012/06/net- parameter-passing.html) Dieser Artikel zeigt Ihnen, wie die Parameterübergabe im Speicher gehandhabt wird. – Developex