我不明白关于将参数传递给 c# 中的方法的一件事。从我所看到的 c# 中的对象有时表现得就像是通过引用传递的,而一旦它们是通过值传递的。在这段代码中,我通过method()
引用传递给一个,并通过值传递给一个。这两个都按预期执行。但是当我创建Update()
并按值传递对象时,我看到它的行为就像它正在更新原始对象一样。
为什么我用 更新原始对象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"; }
}
}`