C# の構造体は値型
C#のクラスは参照型であるのに対し、C#の構造体は値型です。
ということは、以下のようなことが起こります。
public struct Thing { public String name; public Thing(String n) { name = n; } public override String ToString() { return "name=" + name; } } public class Test { public DoSomthing( Thing t ) { t.name = "New Name"; Console.WriteLine( "名前は、" + t ); } static void Main() { Thing t = new Thing( "Old Name" ); Console.WriteLine( "名前は、", t ); Test o = new Test(); o.DoSomething( t ); Console.WriteLine( "名前は、", t ); //!<本当なら、New Name になって欲しいが } }
メソッドに構造体が引数として渡される際は、値そのものが渡されるため、インスタンス t の値は変わらず、出力は、以下のようになります。
名前は、Old Name 名前は、New Name 名前は、Old Name