chào các bạn
mình có thắc mắc này muốn các bạn giải thích cho mình hiểu rõ về vấn đề tham chiếu (ref) trong c#
Code:
namespace truyen_tham_so
{
    /*
     * trong bai hoc hom nay chugn ta cung tim hieu ve truyen tham so
     * trong C# ung dung va chuc nang cua tu khoa ref khi truyen tham so
     */
    //tao cau truc diem
    public  struct point
    {
        public int x;
        public int y;
        //ham hien thi thong so hien duoc nap vao
        public void current()
        {
            Console.WriteLine("Du lieu hien tai duoc nap la : X = {0} | Y = {1}", x, y);
        }
        //ham show thong tin
        public void display()
        {
            Console.WriteLine("Toa do hien thoi             : X = {0} | Y = {1}\n", x, y);
        }
    }
    //struct thong bao
    struct thongbao
    {
        public static   void tinnhan(string mystring)
        {
            Console.WriteLine(mystring);
        }
    }
    //main chinh
    class Program
    {
        //cac ham lam ro tinh truyen tham so
        //tao mot doi tuong tham chieu cua struct point
        public static   void referencesbystructpoint(ref point p2) 
        {            
            //han gia tri moi
            p2.x = 12;
            p2.y = 10;
        }
        ////tap mot ham ko co tinh tham chieu
        public static void referencesbystructpoint(point p2)
        {
            //tao gia tri moi
            p2.x = 20;
            p2.y = 15;
        }
        //ham chinh
        static void Main(string[] args)
        {
            //goi ham tin nhan tu struct thong bao
            thongbao.tinnhan("Tien hanh test !\n");
            //tien hanh thu tham chieu
            //tao mot doi tuong the hien cua struct point
            point p = new point();
            //truyen gia tri toa do cua diem p co dinh(gan trong chuong trinh
            p.x = 10;
            p.y = 20;
            //hien thi thong so duoc nap vao
            p.current();
            //show thong tin
            p.display();
            //lay thong tin truyen tham so
            referencesbystructpoint(ref p);
            p.current();
            p.display();
            ////trang thai tai ham ko tham chieu
            referencesbystructpoint(p);
            p.current();
            p.display();
        }
    }
}
mình muốn hỏi là
tại sao cũng một cái hàm
referencesbystructpoint(ref p) trong hàm main sau khi tiến hành song thì chương trình sẽ load tới hàm tiếp theo là referencesbystructpoint(p)
thì giá trị hàm trả về phải là giá trị mới
nhưng vì hàm ko cho trả về giá trị nên điểm p.x và p.y tiếp tục đọc lại giá trị được tham chiếu từ hàm
referencesbystructpoint(ref p) ?
kết quả đầu ra là
20-10
12-10
12-10-> ý rõ mình muốn hỏi là giá trị này được lấy lại từ hàm referencesbystructpoint(ref point p) ?
tại sao lại ko lấy ở hàm referencesbystructpoint(point p)
và một câu hỏi nữa là mình tiến hành thay đổi vị trí của hai hàm
referencesbystructpoint(p)
vs
referencesbystructpoint(ref p)
cho nhau thì kết quả ra là
20-10
20-10
12-10
--
mình thấy lằng nhằng đoạn tham chiếu quá , mong các bạn giúp đỡ