public void ShouldHaveTheSameHashCodes()
        {
            var ref1 = new SomeRef();
            var ref2 = ref1;

            Assert.AreEqual(ref1.GetHashCode(), ref2.GetHashCode());
        }
Example #2
0
  static void TestValueTypeAndReferenceType() {
    SomeValue x1 = new SomeValue();
    SomeRef y1 = new SomeRef();

    x1.x = 5;
    y1.x = 5;

    SomeValue x2 = x1;
    SomeRef y2 = y1;
  }
Example #3
0
        static void Main()
        {
            SomeRef r1 = new SomeRef(); // Allocated in heap

            r1.name = "Simon";
            r1.age  = 28;

            ReferenceTypes(r1);

            Console.WriteLine($"Name = {r1.name}\n" + $"Age = {r1.age}");
        }
Example #4
0
        public void ShouldCopyreferenceButNotVal()
        {
            var r1 = new SomeRef();
            var v1 = new SomeVal();

            r1.x = 5;
            v1.x = 5;

            var r2 = r1;
            var v2 = v1;

            r1.x = 8;
            v1.x = 9;

            Assert.AreEqual(r1.x, r2.x);
            Assert.AreNotEqual(v1.x, v2.x);
        }
Example #5
0
        public static void Go()
        {
            SomeRef r1 = new SomeRef();
            SomeVal v1 = new SomeVal();

            r1.x = 5;
            v1.x = 5;

            SomeRef r2 = r1;
            SomeVal v2 = v1;

            r2.x = 8;
            v2.x = 8;

            Console.WriteLine("r1.x={0}", r1.x);
            Console.WriteLine("r2.x={0}", r2.x);
            Console.WriteLine("v1.x={0}", v1.x);
            Console.WriteLine("v2.x={0}", v2.x);
        }
Example #6
0
    static void ValueTypeDemo()
    {
        SomeRef r1 = new SomeRef();
        SomeVal v1 = new SomeVal();

        r1.x = 5;
        v1.x = 5;
        Console.WriteLine(r1.x);
        Console.WriteLine(v1.x);

        SomeRef r2 = r1;
        SomeVal v2 = v1;

        r1.x = 8;
        v1.x = 9;
        Console.WriteLine(r1.x);
        Console.WriteLine(r2.x);
        Console.WriteLine(v1.x);
        Console.WriteLine(v2.x);
    }
      public static void Go() {
         SomeRef r1 = new SomeRef();   // Allocated in heap
         SomeVal v1 = new SomeVal();   // Allocated on stack
         r1.x = 5;                     // Pointer dereference
         v1.x = 5;                     // Changed on stack
         Console.WriteLine(r1.x);      // Displays "5"
         Console.WriteLine(v1.x);      // Also displays "5"
         // The left side of Figure 5-2 reflects the situation
         // after the lines above have executed.

         SomeRef r2 = r1;              // Copies reference (pointer) only
         SomeVal v2 = v1;              // Allocate on stack & copies members
         r1.x = 8;                     // Changes r1.x and r2.x
         v1.x = 9;                     // Changes v1.x, not v2.x
         Console.WriteLine(r1.x);      // Displays "8"
         Console.WriteLine(r2.x);      // Displays "8"
         Console.WriteLine(v1.x);      // Displays "9"
         Console.WriteLine(v2.x);      // Displays "5"
         // The right side of Figure 5-2 reflects the situation 
         // after ALL the lines above have executed.
      }
Example #8
0
    static void ValueTypeDemo()
    {
        SomeRef r1 = new SomeRef(); // Allocated in heap
        SomeVal v1 = new SomeVal(); // Allocated on stack

        r1.x = 5;                   // Pointer dereference
        v1.x = 5;                   // Changed on stack
        Console.WriteLine(r1.x);    // Displays "5"
        Console.WriteLine(v1.x);    // Also displays "5"


        SomeRef r2 = r1;            // Copies reference (pointer) only
        SomeVal v2 = v1;            // Allocate on stack & copies members

        r1.x = 8;                   // Changes r1.x and r2.x
        v1.x = 9;                   // Changes v1.x, not v2.x
        Console.WriteLine(r1.x);    // Displays "8"
        Console.WriteLine(r2.x);    // Displays "8"
        Console.WriteLine(v1.x);    // Displays "9"
        Console.WriteLine(v2.x);    // Displays "5"
    }
Example #9
0
        static void ValueTypeDemo()
        {
            SomeRef r1 = new SomeRef(); // Allocated in heap
            SomeVal v1 = new SomeVal(); // Allocated on stack

            r1.x = 5;                   // Pointer dereference
            v1.x = 5;                   // Changed on stack
            Console.WriteLine(r1.x);    // Displays "5"
            Console.WriteLine(v1.x);    // Also displays "5"
                                        // The left side of Figure 5-2 reflects the situation
                                        // after the lines above have executed.
            SomeRef r2 = r1;            // Copies reference (pointer) only
            SomeVal v2 = v1;            // Allocate on stack & copies members

            r1.x = 8;                   // Changes r1.x and r2.x
            v1.x = 9;                   // Changes v1.x, not v2.x
            Console.WriteLine(r1.x);    // Displays "8"
            Console.WriteLine(r2.x);    // Displays "8"
            Console.WriteLine(v1.x);    // Displays "9"
            Console.WriteLine(v2.x);    // Displays "5"
                                        // The right side of Figure 5-2 reflects the situation
                                        // after ALL of the lines above have executed.
        }
Example #10
0
        static void Main(string[] args)
        {
            SomeRef Referencel = new SomeRef(); //分配在托管堆上
            SomeVal Valuel     = new SomeVal(); //分配在堆栈上

            Referencel.x = 3;                   //解析指针
            Valuel.x     = 3;                   //在堆栈上修改



            Console.WriteLine("引用类型:Referencel=" + Referencel.x);
            //显示为“3”
            Console.WriteLine("值类型:Valuel=" + Valuel.x); //显示为“3”
            SomeRef Reference2 = Referencel;             //仅复制引用(指针)
            SomeVal Value2     = Valuel;                 //先在堆栈上分配,然后复制成员

            Referencel.x = 8;                            //改变了Referencel.x和Reference2.x
            Valuel.x     = 7;                            //改变了Valuel.x,没有改变Value2.x
            Console.WriteLine("引用类型:Referencel  " + Referencel.x);
            Console.WriteLine("引用类型:Reference2  " + Reference2.x);
            Console.WriteLine("值类型:Valuel  " + Valuel.x);
            Console.WriteLine("值类型:Value2  " + Value2.x);
            Console.ReadLine();
        }
 static void ValueTypeDemo()
 {
     SomeRef r1 = new SomeRef(); // Размещается в куче
     SomeVal v1 = new SomeVal(); // Размещается в стеке
     // также можно записать:
     SomeVal v3; // Размещается в стеке
     r1.x = 5; // Разыменовывание указателя
     v1.x = 5; // Изменение в стеке
     Console.WriteLine(r1.x); // Отображается "5"
     Console.WriteLine(v1.x); // Также отображается "5"
     // В левой части рис. 5.2 показан результат
     // выполнения предыдущих строк
     SomeRef r2 = r1; // Копируется только ссылка (указатель)
     SomeVal v2 = v1; // Помещаем в стек и копируем члены
     r1.x = 8; // Изменяются r1.x и r2.x
     v1.x = 9; // Изменяется v1.x, но не v2.x
     Console.WriteLine(r1.x); // Отображается "8"
     Console.WriteLine(r2.x); // Отображается "8"
     Console.WriteLine(v1.x); // Отображается "9"
     Console.WriteLine(v2.x); // Отображается "5"
     // В правой части рис. 5.2 показан результат
     // выполнения ВСЕХ предыдущих строк
 }
Example #12
0
 static void ReferenceTypes(SomeRef someRef)
 {
     someRef.name = "Awais";
     someRef.age  = 21;
 }
Example #13
0
 public void TestInitialize()
 {
     _someRef = new SomeRef();
     _someVal = new SomeVal();
 }