private static void RefType_CreateNewInstance(SampleClass sample)
 {
     sample       = new SampleClass();
     sample.myInt = 13;
     Console.WriteLine($"Inside: Created a new instance of SampleClass. SampleClass.myInt is set to {sample.myInt}");
 }
 private static void RefType_ModifyValue(SampleClass sample)
 {
     sample.myInt = 13;
     Console.WriteLine($"Inside: Change myInt to {sample.myInt}");
 }
        static void Main(string[] args)
        {
            Console.WriteLine($"{Environment.NewLine}CASE:Modify Value of ValueType");
            SampleStruct myValTypeSample1 = CreateNewSampleStruct();                                         // myRefTypeSample1.myInt is 42;

            ValueType_ModifyValue(myValTypeSample1);                                                         // value is modified to 13
            Console.WriteLine($"Outside: The instance of SampleStruct has value {myValTypeSample1.myInt}."); // myValTypeSample1.myInt will be 42

            Console.WriteLine($"{Environment.NewLine}CASE: Modify Value of ReferenceType");
            SampleClass myRefTypeSample1 = CreateNewSampleClass();                                          // myRefTypeSample1.myInt is 42;

            RefType_ModifyValue(myRefTypeSample1);                                                          // value is modified to 13
            Console.WriteLine($"Outside: The instance of SampleClass has value {myRefTypeSample1.myInt}."); // myRefTypeSample1.myInt will 13


            Console.WriteLine(Environment.NewLine);

            // create new instances
            Console.WriteLine($"{Environment.NewLine}CASE:Change Instance of ValueType");
            SampleStruct myValTypeSample2 = CreateNewSampleStruct();                                         // myValTypeSample2.myInt is 42

            ValueType_CreateNewInstance(myValTypeSample2);                                                   // new instance created & assigned, myInt set to 13
            Console.WriteLine($"Outside: The instance of SampleStruct has value {myValTypeSample2.myInt}."); // myValTypeSample2.myInt will be 42

            Console.WriteLine($"{Environment.NewLine}CASE:Change Instance of ReferenceType");
            SampleClass myRefTypeSample2 = CreateNewSampleClass();                                          // myRefTypeSample2.myInt is 42;

            RefType_CreateNewInstance(myRefTypeSample2);                                                    // new instance created & assigned, myInt set to 13
            Console.WriteLine($"Outside: The instance of SampleClass has value {myRefTypeSample2.myInt}."); // myRefTypeSample2.myInt will be 42

            Console.WriteLine(Environment.NewLine);

            // Modify values w REF
            Console.WriteLine($"{Environment.NewLine}CASE:Modify Value of ReferenceType with REF");
            SampleClass myRefTypeSample3 = CreateNewSampleClass();                                          // myRefTypeSample3.myInt = 42;

            RefType_WithRef_ModifyValue(ref myRefTypeSample3);                                              // value is modified to 13 with REF
            Console.WriteLine($"Outside: The instance of SampleClass has value {myRefTypeSample3.myInt}."); // myRefTypeSample1.myInt will be 13

            Console.WriteLine($"{Environment.NewLine}CASE:Modify Value of ValueType with REF");
            SampleStruct myValTypeSample3 = CreateNewSampleStruct();                                         // myValTypeSample3.myInt = 42

            ValueType_WithRef__ModifyValue(ref myValTypeSample3);                                            // value is modified to 13 with REF
            Console.WriteLine($"Outside: The instance of SampleStruct has value {myValTypeSample3.myInt}."); // myValTypeSample3.myInt will be 13

            Console.WriteLine(Environment.NewLine);

            // create new instances w REF
            Console.WriteLine($"{Environment.NewLine}CASE:Change Instance of ReferenceType with REF");
            SampleClass myRefTypeSample4 = CreateNewSampleClass();                                          //myRefTypeSample4.myInt = 42;

            RefType_WithRef_CreateNewInstance(ref myRefTypeSample4);                                        // new instance is created & assigned with myInt = 13
            Console.WriteLine($"Outside: The instance of SampleClass has value {myRefTypeSample4.myInt}."); // myRefTypeSample4.myInt will be 13

            Console.WriteLine($"{Environment.NewLine}CASE:Change Instance of ValueType with REF");
            SampleStruct myValTypeSample4 = CreateNewSampleStruct();                                         // myValTypeSample4.myInt = 42;

            ValueType_WithRef_CreateNewInstance(ref myValTypeSample4);                                       // new instance is created & assigned with myInt = 13
            Console.WriteLine($"Outside: The instance of SampleStruct has value {myValTypeSample4.myInt}."); // {myValTypeSample4.myInt will be 13

            Console.ReadLine();
        }