コンピュータクワガタ

かっぱのかっぱによるコンピュータ関連のサイトです

C#の学習 No. 4 構造体

構造体がある!
クラスと同様に、コンストラクタや、プロパティ、メソッド!!、フィールド等を持てる。
違いは、継承ができない点とデストラクタを持たない。また、クラスは参照型だが、構造体は値型という点。
コードも書いて検証してみたけど、イマイチよく分からない。クラスではダメなの?
構造体はまたあとで有効性を確認したい。実際にクラスライブラリーにありそうだからその辺を参考にしたら有効性は見えると思われる。
とりあえず、参照型と値型の違いを簡単な例で確認。

namespace Sample
{
    class ClassType
    {
        public int value;
      
        static void Main(string[] args)
        {
            ClassType c1 = new ClassType();
            ClassType c2 = c1;
            c1.value = 1;
            c2.value = 2;
            StructType s1 = new StructType();
            StructType s2 = s1;
            s1.value = 1;
            s2.value = 2;


            System.Console.WriteLine("c1 = " + c1.value);
            System.Console.WriteLine("c2 = " + c2.value);
            System.Console.WriteLine("s1 = " + s1.value);
            System.Console.WriteLine("s2 = " + s2.value);
        }
    }

    struct StructType
    {
        public int value;
    }
}

結果は以下。

c1 = 2
c2 = 2
s1 = 1
s2 = 2

クラスの方は=で参照が渡されるのでc1とc2の実体は同じ。
構造体は=でコピーになるのでs1とs2の実体は別になる。