Ejemplo n.º 1
0
        public ReferenceSemantics()
        {
            //Entry point

            // *******
            // Classes
            // *******
            MyObj r1 = new MyObj(2, 3);
            MyObj r2 = new MyObj(10, 20);
            MyObj r3 = r1;

            Display(r1, "r1");
            Display(r2, "r2");
            Display(r3, "r3");

            Console.WriteLine("Update r1");
            NegateObjInline(r1);
            //r1.a *= -1;
            //r1.b *= -1;

            Display(r1, "r1");
            Display(r2, "r2");
            Display(r3, "r3");

            // **********
            // Structures
            // **********
            Console.WriteLine("Structures");
            MyStruct s1 = new MyStruct(2, 3);
            MyStruct s2 = s1;

            Console.WriteLine($"s1: {s1}, s2: {s2}");
            s1 = NegateStruct(s1); //Passes a copy, gets back a new value
            Console.WriteLine($"s1: {s1}, s2: {s2}");

            //Passing as a parameter
            Console.WriteLine("Negate s2 inline");
            NegateStructInline(ref s2); //Passed by reference
            Console.WriteLine($"s1: {s1}, s2: {s2}");
        }
Ejemplo n.º 2
0
        public Equivalence()
        {
            //Entry point

            // *******************
            // Reference semantics
            // *******************
            MyObj r1 = new MyObj(2, 3);
            MyObj r2 = new MyObj(-2, -3);
            MyObj r3 = r1;

            Display(r1, "r1");
            Display(r2, "r2");
            Display(r3, "r3");

            Console.WriteLine("Update r1");
            r1.a *= -1;
            r1.b *= -1;

            Display(r1, "r1");
            Display(r2, "r2");
            Display(r3, "r3");

            //Compare two absolutely equal objects
            if (r1.Equals(r3))
            {
                Console.WriteLine("r1 Equals r3");
            }
            else
            {
                Console.WriteLine("r1 is not Equal to r3");
            }

            if (r1 == r3)
            {
                Console.WriteLine("r1 is a reference to r3");
            }
            else
            {
                Console.WriteLine("r1 is not a reference to r3");
            }

            Console.WriteLine("***** Test for equality *****");
            Console.WriteLine("Now set the values of r2 to the same values as r1");

            //Compare two similar objects
            r2.a = r1.a;
            r2.b = r1.b;
            Display(r1, "r1");
            Display(r2, "r2");

            if (r1.Equals(r2))
            {
                Console.WriteLine("r1 has the same values as r2");
            }
            else
            {
                Console.WriteLine("r1 has different values to r2");
            }

            if (r1 == r2)
            {
                Console.WriteLine("r1 is a reference to r2");
            }
            else
            {
                Console.WriteLine("r1 is not a reference to r2");
            }

            // **** Strucures ***
            MyStruct s1 = new MyStruct(10, 20);
            MyStruct s2 = new MyStruct(10, 20);

            //if (s1 == s2) does not compile
            if (s1.Equals(s2))
            {
                Console.WriteLine("s1 and s2 are the same!");
            }
            else
            {
                Console.WriteLine("s1 and s2 are not the same!");
            }
        }
Ejemplo n.º 3
0
 void Display(MyObj obj, [CallerMemberName] string memberName = "") => Console.WriteLine(memberName + $" = {obj}");
Ejemplo n.º 4
0
 // Parameter is a reference type, so can be modified inline
 static void NegateObjInline(MyObj obj)
 {
     obj.a *= -1;
     obj.b *= -1;
 }