Cách truyền tham trị, tham chiếu trong C#
Trong bài này, kiến thức tiếp theo chúng ta sẽ tìm hiểu là cách truyền tham trị, tham chiếu trong C#:
- Tham trị, tham chiếu là gì?
- Cách sử dụng tham trị, tham chiếu
1. Tham trị, tham chiếu là gì?
Như chúng ta đã biết một biến thì sẽ có giá trị và địa chỉ ô nhớ trên máy tính để lưu giá trị của biến. Khi chúng ta truyền tham số cho một phương thức là:
- Tham trị: có nghĩa là truyền giá trị của biến. Mọi xử lý tính toán trong phương thức khi kết thúc thì không làm thay đổi giá trị của biến tham số truyền vào.
- Tham chiếu: có nghĩa là truyền trực tiếp địa chỉ ô nhớ của biến. Chính vì thế mọi tính toán trong phương thức sẽ làm thay đổi giá trị của biến tham số truyền vào khi phương thức kết thúc.
2. Cách sử dụng tham trị, tham chiếu
#1. Cách sử dụng Tham trị
namespace MinhHoangBlog
{
class Program
{
static void Main(string[] args)
{
// Khai báo 2 số để tìm max
int n1 = 100;
int n2 = 200;
// Truyền 2 biến n1, n2 theo kiểu Tham trị
int max = FindMax( n1, n2 );
Console.WriteLine( "Before n1 = {0}", n1 );
Console.WriteLine( "Before n2 = {0}", n2 );
Console.WriteLine( "Max number of {0}, {1} is {2}", n1, n2, max );
Console.WriteLine( "After n1 = {0}", n1 );
Console.WriteLine( "After n2 = {0}", n2 );
Console.WriteLine( "Gia tri cua 2 bien n1, n2 khong thay doi." );
Console.ReadKey();
}
public static int FindMax(int number1, int number2)
{
int max;
if (number1 > number2)
max = number1;
else
max = number2;
return max;
}
}
}
[/code]
#2. Cách sử dụng Tham chiếu
Với truyền tham chiếu – Chúng ta sẽ sử dụng từ khóa ref hoặc out:
- Khi dùng ref: biến phải được khởi tạo trước (x = 5), rồi mới truyền cho phương thức.
- Khi dùng out: biến (x) không cần khởi tạo trước khi truyền vào phương thức. Nhưng bên trong phương thức bắt buộc phải có giá trị gán cho biến (x = 5).
- Khi gọi và khi khai báo phương thức đều bắt buộc phải có kèm theo ref hoặc out trước tên biến muốn truyền theo kiểu tham chiếu.
namespace MinhHoangBlog
{
class Program
{
static void Main(string[] args)
{
// Khai báo và khởi tạo
int a = 100;
int b = 99;
Console.WriteLine( "Before swap: a = {0}, b = {1}", a, b );
// Truyền 2 biến a, b theo kiểu Tham chiếu, dùng từ khóa [ref]
Swap( ref a, ref b );
Console.WriteLine( "After swap: a = {0}, b = {1}", a, b );
// Chỉ khai báo
int x;
// Truyền biến x theo kiểu Tham chiếu, dùng từ khóa [out] GetValue( out x );
Console.WriteLine( "Now, value of x = {0}", x );
Console.ReadKey();
}
// Method hoán vị 2 số Swap, dùng biến tham chiếu [ref]
public static void Swap(ref int a, ref int b)
{
int tmp;
tmp = a;
a = b;
b = tmp;
}
// Method GetValue, dùng biến tham chiếu [out]
public static void GetValue(out int x)
{
x = 5;
}
}
}
[/code]
[…] Tham số thứ hai là biến sẽ chứa giá trị sau khi được chuyển đổi đi kèm với từ khóa out, để thông báo rằng biến thứ hai sẽ truyền theo kiểu tham chiếu (Xem bài Cách truyền tham trị, tham chiếu trong C#) […]
[…] enum là một kiểu tham trị giống như kiểu […]
[…] từ lớp System.Array (có nguồn gốc từ System.Object). Vì vậy, trong C# mảng thuộc kiểu tham chiếu, được quản lý và cấp phát trên vùng nhớ Heap. Xem thêm: Array Types in .NET (link […]
[…] Trong C# thông thường chỉ những biến có kiểu tham chiếu mới có thể được gán giá trị null. Tuy nhiên, C# cung cấp kiểu nullable để cho […]
[…] Xem thêm: Cách truyền tham trị, tham chiếu trong C#. […]