Truyền tham chiếu out và ref trong C#

Ví dụ

Dĩ nhiên, kết quả in ra x vẫn bằng 5 vì mình đã sử dụng cách truyền tham trị (truyền giá trị của biến). Vậy còn truyền tham chiếu thì sẽ như thế nào? Trước hết hãy làm quen với out.

out parameter

Mình sẽ thay đổi đoạn code trên 1 chút xíu như sau

Quan sát 2 dòng được thay đổi là 4 và 8, mình đã thêm vào từ khóa out để truyền tham chiếu. Build và xem thông báo lỗi:

out parameter

Có thể hiểu nôm na lỗi là biến x chưa được chỉ định giá trị trước khi thay đổi. Tức là trước khi thay đổi giá trị của biến x trong hàm, ta phải gán x cho 1 giá trị nào đó. Đây chính là điểm lưu ý đầu tiên của out parameter.

Bây giờ mình sẽ sửa lại đoạn code, đơn giản là ta chỉ cần gán cho x 1 giá trị nào đó trước khi thay đổi nó.

Và kết quả:

out parameter

À khoan, có gì đó hơi lặp lại thì phải. Đó là dòng 3 và dòng 10. Đây là lúc sử dụng điểm đặc biệt thứ 2 của out parameter - không cần gán giá trị ban đầu cho biến, mình sẽ hủy gán giá trị của x ở dòng thứ 3.

Và tất nhiên kết quả vẫn không thay đổi.

  1. Tổng kết các đặc điểm về out parameter
  2. Sử dụng để truyền tham chiếu.
  3. Không cần khởi gán giá trị cho biến trước khi sử dụng.
  4. Bắt buộc phải gán giá trị cho out parameter trước khi thay đổi giá trị trong hàm.

ref parameter

Nếu bạn đã hiểu cách sử dụng out parameter, bạn sẽ rất dễ dàng để hiểu ref parameter vì nó hoàn toàn trái ngược với out parameter. Trước tiên, mình sẽ sử dụng lại đoạn code ở trên và thay từ khóa out thành ref.

Một thông báo lỗi xuất hiện:

ref parameter

Nó tương tự với lỗi ban đầu của out, đó chính là chưa gán giá trị cho ref parameter. Điều trái ngược nữa là trong hàm sử dụng ref parameter, ta không cần phải gán giá trị trước khi thay đổi nó. Vì vậy đoạn code được sử thành:

Và kết quả là:

ref parameter

Hy vọng qua bài viết này, các bạn sẽ sử dụng một cách hợp lý out và ref parameter trong code của mình để tận dụng sức mạnh của mỗi cái.

Comments

  1. Tôi đã đọc và biết cách dùng . Nhưng không hiểu tại sao ???

    ReplyDelete
  2. This comment has been removed by the author.

    ReplyDelete

Post a Comment

Popular posts from this blog

Gỡ bộ Visual Studio ra khỏi máy tính

Căn giữa thẻ div trong thẻ div