方法 : メソッドに構造体を渡すこととクラス参照を渡すことの違いを理解する (C# プログラミング ガイド)

更新 : 2007 年 11 月

構造体がメソッドに渡されるときは構造体のコピーが渡されますが、クラス インスタンスが渡されるときは参照が渡されます。次にその例を示します。

次の例の出力は、クラス インスタンスを ClassTaker メソッドに渡すと、クラス フィールドの値だけが変更されることを示しています。構造体フィールドは、そのインスタンスを StructTaker メソッドに渡しても変更されません。これは、クラス参照が ClassTaker メソッドに渡されるのに対し、構造体のコピーが StructTaker メソッドに渡されるからです。

使用例

class TheClass
{
    public string willIChange;
}

struct TheStruct
{
    public string willIChange;
}

class TestClassAndStruct
{
    static void ClassTaker(TheClass c)
    {
        c.willIChange = "Changed";
    }

    static void StructTaker(TheStruct s)
    {
        s.willIChange = "Changed";
    }

    static void Main()
    {
        TheClass testClass = new TheClass();
        TheStruct testStruct = new TheStruct();

        testClass.willIChange = "Not Changed";
        testStruct.willIChange = "Not Changed";

        ClassTaker(testClass);
        StructTaker(testStruct);

        Console.WriteLine("Class field = {0}", testClass.willIChange);
        Console.WriteLine("Struct field = {0}", testStruct.willIChange);

        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
/* Output:
    Class field = Changed
    Struct field = Not Changed
*/

参照

概念

C# プログラミング ガイド

参照

クラス (C# プログラミング ガイド)

構造体 (C# プログラミング ガイド)

パラメータの引き渡し (C# プログラミング ガイド)