我不明白有關將參數傳遞給c#中的方法的一件事。從我看到的c#中的對象有時表現得像通過引用傳遞一次,就好像它們是按值傳遞一樣。在這段代碼中,我通過引用和通過值傳遞給method()
。這兩個按預期執行。但是當我創建Update()
並通過值傳遞一個對象時,我發現它的行爲就像更新原始對象一樣。爲什麼c#對象有一次像通過值傳遞和一次通過引用傳遞?
爲什麼我更新原始對象與Update(myString input)
但不method(myString input)
更新呢?
這是不符合邏輯!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ClassPassing
{
class Program
{
static void Main(string[] args)
{
myString zmienna = new myString();
Update(zmienna);
Console.WriteLine(zmienna.stringValue);
Console.WriteLine(zmienna.stringValue2);
Console.ReadLine();
zmienna.stringValue = "This has run in main";
zmienna.stringValue2 = "This is a help string";
method(zmienna);
Console.WriteLine(zmienna.stringValue);
Console.WriteLine(zmienna.stringValue2);
Console.ReadLine();
method(ref zmienna);
Console.WriteLine(zmienna.stringValue);
Console.WriteLine(zmienna.stringValue2);
Console.ReadLine();
}
static void method(myString input)
{
input = new myString();
}
static void method(ref myString input)
{
input = new myString();
}
static void Update(myString input)
{
input.stringValue2 = "This has run in update method";
}
}
public class myString
{
public string stringValue { get; set; }
public string stringValue2 { get; set; }
public myString() { stringValue = "This has been just constructed"; this.stringValue2 = "This has been just constructed"; }
}
}`
您正在通過*引用*值,所以你有兩個引用都指向相同的類實例 – BrokenGlass