C#基础问题,为什么这里s1.age输出10,a输出3呢?


namespace ConsoleApp1
{
    class Program
    {
        
        static void Main(string[] args)
        {
            student s1=new student();
            int a=s1.Age = 3;
            Console.Write(s1.Age);
            Console.Write(a);
        }
    }

    public class student
    {
        private int age=2;
        public int Age
        {
            get { return age; }
            set {
                if (value < 10)
                    {
                    age = 10;
                     }
                else
                {
                    age = value;
                }
                }
        }
    }
}

请问为什么这里s1.age输出10,a输出3呢?a不应该也是10吗?

你发现了一个新大陆,从直观上看 a==3,也是合理的,实际是编译器把它拆分成两个语句了。
s1.Age = 3;
int a = 3;

student s1 = new student(); //在这里取回的是小写age=2这个值 也就说是等于s1=age age值是2
int a = s1.Age = 3; 这里赋值的时候 你是先给a=s1.Age(10这个值)然后又=3(相当从新赋值了个3) 你这个写法拆开写就是 a=s1.Age; a=3;这个效果
Console.Write(s1.Age);//这里输出的是你从student()方法里从取的10这个值
Console.Write(a);//这里输出的是你从新付了俩边值 最后付的值是3