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 đỡ