Trong đoạn mã sau, tôi đang cố gắng có phương thức (Work) từ lớp TestClass thay đổi giá trị của một số biến trong chương trình chính mà không phải trả lại chúng. Các biến được truyền theo tham chiếu trong hàm tạo TestClass.C# - truyền tham số bằng tham chiếu đến hàm tạo sau đó sử dụng chúng từ phương thức
class Program
{
static void Main(string[] args)
{
int a, b, c, d;
a = 5; b = 10; c = 20; d = 25;
Console.WriteLine("Main before TestClass: a=" + a + " b=" + b + " c=" + c + " d=" + d);
TestClass testObj = new TestClass(ref a,ref b,ref c,ref d);
testObj.Work();
Console.WriteLine("Main after TestClass: a=" + a + " b=" + b + " c=" + c + " d=" + d);
Console.ReadLine();
}
}
public class TestClass
{
int _a, _b, _c, _d;
public TestClass(ref int a, ref int b, ref int c, ref int d)
{
_a = a; _b = b; _c = c; _d = d;
}
public void Work()
{
Console.WriteLine("Work before changing: a=" + _a + " b=" + _b + " c=" + _c + " d=" + _d);
_a = 0; _b = 1; _c = 2; _d = 3;
Console.WriteLine("Work after changing: a=" + _a + " b=" + _b + " c=" + _c + " d=" + _d);
}
}
Tuy nhiên mã này trả về:
Main before TestClass: a=5 b=10 c=20 d=25
Work before changing: a=5 b=10 c=20 d=25
Work after changing: a=0 b=1 c=2 d=3
Main after TestClass: a=5 b=10 c=20 d=25
Có cách nào để có phương pháp thay đổi các giá trị của các biến trong chương trình chính? Cảm ơn bạn!
Bạn cần lưu trữ * tham chiếu * trong '_a', v.v. nhưng bạn vừa khai báo chúng là' int '. Khi nó quay ra, CLR không hỗ trợ khái niệm này - bạn * có thể * có các biến cục bộ là các tham chiếu, chứ không phải các trường. [Nhưng C# thậm chí không cho phép bạn khai báo các biến cục bộ như vậy] (http://blogs.msdn.com/b/ericlippert/archive/2011/06/23/ref-returns-and-ref-locals.aspx). –