Class Inside Structure

Posted by Knvn on Stack Overflow See other posts from Stack Overflow or by Knvn
Published on 2011-02-05T06:52:39Z Indexed on 2011/02/05 7:25 UTC
Read the original article Hit count: 98

Filed under:
|
|

Could some one please explain, What happens when a reference type is defined inside the value type. I write the following code:

namespace ClassInsideStruct
{
class ClassInsideStruct
{
    static void Main(string[] args)
    {

        ValueType ObjVal = new ValueType(10);
        ObjVal.Display();

        ValueType.ReferenceType ObjValRef = new ValueType.ReferenceType(10);
        ObjValRef.Display();

        Test(ObjVal, ObjValRef);

        ObjVal.Display();
        ObjValRef.Display();

        Console.ReadKey();

    }

    private static void Test(ValueType v, ValueType.ReferenceType r)
    {
        v.SValue = 50;
        r.RValue = 50;
    }

}

struct ValueType
{

    int StructNum;
    ReferenceType ObjRef;

    public ValueType(int i)
    {
        StructNum = i;
        ObjRef = new ReferenceType(i);
    }

    public int SValue
    {
        get { return StructNum; }
        set
        {
            StructNum = value;
            ObjRef.RValue = value;
        }
    }

    public void Display()
    {
        Console.WriteLine("ValueType: " + StructNum);
        Console.Write("ReferenceType Inside ValueType Instance: ");
        ObjRef.Display();
    }

    public class ReferenceType
    {

        int ClassNum;

        public ReferenceType(int i)
        {
            ClassNum = i;
        }

        public void Display()
        {
            Console.WriteLine("Reference Type: " + ClassNum);
        }

        public int RValue
        {
            get { return ClassNum; }
            set { ClassNum = value; }
        }

    }

}

}

Which outputs:

ValueType: 10
ReferenceType Inside ValueType Instance: Reference Type: 10
Reference Type: 10
ValueType: 10
ReferenceType Inside ValueType Instance: Reference Type: 50
Reference Type: 50

I'm curious to know, after calling the method Test(ObjVal, ObjValRef), how the values of ReferenceType is changed to 50 which resides inside the ValueType who's value is not changed?

© Stack Overflow or respective owner

Related posts about c#

Related posts about .NET