Từ khóa ref và out trong C#

Khóa học lập trình C# căn bản

5.0 (2 đánh giá)
Tạo bởi Trần Thành Vi Thanh Cập nhật lần cuối 22:33 22-03-2019 37.073 lượt xem 4 bình luận
Học nhanh

Danh sách bài học

Từ khóa ref và out trong C#

Dẫn nhập

Ở các bài học trước, chúng ta đã cùng nhau tìm hiểu về BIẾN TOÀN CỤC VÀ BIẾN CỤC BỘTRONG C#. Chúng ta đã biết cách sử dụng hàm cùng parameter. Có một vấn đề phát sinh như sau: mong muốn giá trị của parameter truyền vào, sau khi thực thi các câu lệnh bên trong hàm giá trị đó có thể thay đổi.
Chúng ta sẽ cùng đi đến cách sử dung từ khóa ref và out trong C# để giải quyết vấn đề này nhé.


Nội dung

Để đọc hiểu bài này tốt nhất các bạn nên có kiến thức cơ bản về các phần:

Trong bài học này, chúng ta sẽ cùng tìm hiểu các vấn đề:

  • Từ khóa refout trong C#

Từ khóa ref và out trong C#

Từ khóa ref

Ta xét ví dụ sau:

static void Main(string[] args)

        {

            int value = 5;



            Console.WriteLine("Value before increase: {0}", value);



            IncreaseValue(value);



            Console.WriteLine("Value after increase: {0}", value);

           

            Console.ReadKey();

        }



        static void IncreaseValue(int value)

        {

            value++;

        }

 

Chúng ta sẽ thấy kết quả màn hình in ra hai giá trị 5. Vì sau khi kết thúc hàm IncreaseValue giá trị của value vẫn không thay đổi.

Với mong muốn giá trị của value sẽ thay đổi sau khi kết thúc lời gọi hàm IncreaseValue thì chúng ta sẽ thêm từ khóa ref phía trước kiểu dữ liệu của parameter mong muốn thay đổi giá trị khi khai báo hàm. Đồng thời phải thêm từ khóa ref ngay trước biến parameter truyền vào khi sử dụng hàm.

static void Main(string[] args)

        {

            int value = 5;



            Console.WriteLine("Value before increase: {0}", value);



            IncreaseValue(ref value);



            Console.WriteLine("Value after increase: {0}", value);

           

            Console.ReadKey();

        }



        static void IncreaseValue(ref int value)

        {

            value++;

        }

 

Chúng ta có thể thấy kết quả in ra màn hình giá trị 5 và 6. Do giá trị của value đã thay đổi sau khi kết thúc lời gọi hàm IncreaseValue.

 Lưu ý:

  • Từ khóa ref phải có trước tên parametter của hàm và trước tên biến truyền vào khi gọi hàm sử dụng.
  • Truyền parameter có từ khóa ref bắt buộc phải là một biến (không thể truyền vào một hằng vì hằng là giá trị không thay đổi).
  • Có thể có một hoặc nhiều parameter với từ khóa ref trong lời khai báo hàm.
  • Biến truyền vào có từ khóa ref thì phải được khởi tạo giá trị trước khi truyền vào.
  • Hàm sử dụng sẽ thao tác trực tiếp với vùng nhớ của các parameter trên RAM. Cho nên kết thúc lời gọi hàm giá trị các parameter sẽ bị thay đổi.

Từ khóa out

Từ khóa out cũng tương tự từ khóa ref. Đó là:

  • Vùng nhớ của các parameter sẽ được hàm sử dụng thao tác trực tiếp, dẫn đến khi kết thúc lời gọi hàm giá trị của các parametter có thể bị thay đổi.
  •  Phải có từ khóa out trước tên parameter của hàm và trước tên biến truyền vào khi gọi hàm sử dụng.

Nhưng có một sự khác biệt đó là:

  •  Biến truyền vào có từ khóa out sẽ không cần khởi tạo giá trị ban đầu.
  •  Parameter đó chỉ như một thùng chứa kết quả trả về khi kết thúc gọi hàm.
  •  Đồng thời parameter đó phải được khởi tạo ngay bên trong lời gọi hàm.
static void Main(string[] args)

        {

            int value = 5;



            Console.WriteLine("Value before increase: {0}", value);



            IncreaseValue(out value);



            Console.WriteLine("Value after increase: {0}", value);

           

            Console.ReadKey();

        }



        static void IncreaseValue(out int value)

        {

            value = 0;

            value++;

        }

 

Chúng ta có thể thấy. Trong thân hàm IncreaseValue bắt buộc phải khởi tạo giá trị cho biến value. Kết quả màn hình xuất ra giá trị 5 ban đầu và 1 là kết quả cuối cùng của biến value sau khi kết thúc lời gọi hàm IncreaseValue.


Kết luận

Qua bài này chúng ta đã nắm được cách sử dụng từ khóa refout trong C#.

Bài sau chúng ta sẽ tìm hiểu về MẢNG 1 CHIỀU TRONG C#.

Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”.


Tải xuống

Tài liệu

Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học Từ khóa ref và out trong C# dưới dạng file PDF trong link bên dưới.

Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com

Đừng quên likeshare để ủng hộ Kteam và tác giả nhé!


Thảo luận

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần BÌNH LUẬN bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.

Nội dung bài viết

Tác giả

Mỗi buổi sáng thức dậy, bạn có 2 lựa chọn, tiếp tục ngủ để mơ những giấc mơ hoặc thức dậy và theo đuổi chúng!

Khóa học

Khóa học lập trình C# căn bản

Bạn mới bắt đầu học lập trình? Bạn đang muốn học thêm ngôn ngữ lập trình mới? C# là lựa chọn hoàn hảo để đáp ứng các nhu cầu trên.

Ngôn ngữ C# là một ngôn ngữ mới, cấu trúc rõ ràng, dễ hiểu và dễ học. C# thừa hưởng những ưu việt từ ngôn ngữ Java, C, C++ cũng như khắc phục được những hạn chế của các ngôn ngữ này. C# là ngôn ngữ lập trình hướng đối tượng được phát triển bởi Microsoft, được xây dựng dựa trên C++ và Java.

Khoá học lần này sẽ mang đến toàn bộ những kiến thức cơ bản về C#. Chào mừng các bạn đã đến với khoá học LẬP TRÌNH C# CƠ BẢN của Kteam.

Đánh giá

le.nguyen1292 đã đánh giá 19:38 01-03-2019

KhacDuyLam đã đánh giá 19:38 01-03-2019

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
Minh Kỳ đã bình luận 15:29 15-05-2019

Cho em oi ve tu khoa Out: "Đồng thời parameter đó phải được khởi tạo ngay bên trong lời gọi hàm."

Nghia la khi tao ham phai tao mot Param de chua du lieu truyen vao khi dung tu khoa Out phai khong vay mn?

Dinh Tona đã bình luận 13:57 06-12-2017

Từ khóa static

Chỗ này chưa có link a ơi !

Không có video.