예제 #1
0
        static void ValRefTypesDemo()
        {
            EvilStruct es1 = new EvilStruct();

            es1.PointRef = new PointRef()
            {
                X = 1, Y = 2
            };
            //es1.PointRef.X = 1;
            //es1.PointRef.Y = 2;
            EvilStruct es2 = es1;

            Console.WriteLine($"es1.PointRef.X={es1.PointRef.X}" +
                              $", es1.PointRef.Y= {es1.PointRef.Y}");
            Console.WriteLine($"es2.PointRef.X={es2.PointRef.X}" +
                              $", es2.PointRef.Y={es2.PointRef.Y}");

            es2.PointRef.X = 42;
            es2.PointRef.Y = 45;

            Console.WriteLine($"es1.PointRef.X={es1.PointRef.X}" +
                              $", es1.PointRef.Y= {es1.PointRef.Y}");
            Console.WriteLine($"es2.PointRef.X={es2.PointRef.X}" +
                              $", es2.PointRef.Y={es2.PointRef.Y}");

            Console.ReadLine();

            PointVal a;//Тоже что и Pointval a = new Pointval();

            a.X = 3;
            a.Y = 5;

            PointVal b = a;

            b.X = 7;
            b.Y = 10;

            a.LogValues();
            b.LogValues();

            Console.WriteLine("After structs");

            PointRef c = new PointRef();

            c.X = 3;
            c.Y = 5;

            PointRef d = c;

            d.X = 7;
            d.Y = 10;

            c.LogValues();
            d.LogValues();
        }
예제 #2
0
        static void NRE_NullableValTypesDemo()
        {
            PointVal?pv = null;

            if (pv.HasValue)
            {
                PointVal pv2 = pv.Value;
                Console.WriteLine(pv.Value.X);
                Console.WriteLine(pv2.X);
            }
            else
            {
                //
            }

            PointVal pv3 = pv.GetValueOrDefault();

            PointRef c = null;
            // Console.WriteLine(c.X);
        }