类内部结构

Nav*_*hat 5 .net c# oop

有人可以解释一下,当在值类型中定义引用类型时会发生什么.我写下面的代码:

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; }
            }

        }

    }

}
Run Code Online (Sandbox Code Playgroud)

哪个输出:

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

我很想知道,在调用方法之后Test(ObjVal, ObjValRef),如何将值ReferenceType更改为50,它位于ValueType其值不会更改的内部?

Sco*_* M. 2

我不确定,但编译器可能会将代码分离到一个单独的类中,然后只强制执行所需的规则。当您使用值类型时,每次将值传递到方法时都会复制该值。对引用类型的引用将被复制,但它引用同一个对象。同一个引用对象将发生更改,而复制的值类型将发生更改。您传入的原件不会反映副本上的更改。