C# でメソッドにパラメーターを渡すことについて、1 つのことを理解していません。私が見たところ、C# のオブジェクトは、参照によって渡されたように動作したり、値によって渡されたように動作したりすることがあります。このコードでは、method()
1 つは参照渡し、もう 1 つは値渡しです。これらは両方とも期待どおりに実行されます。しかし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"; }
}
}`