Dùng từ khóa ref với kiểu dữ liệu tham chiếu
C#
18
C#.NET
4
White

Phạm Quốc Thắng viết ngày 01/06/2016

static void Main(string[] args)
{
    var people = new Student("Phạm Quốc Thắng", "Developer", 19);
    change(people);
    Console.Write(people.Title); // MSP

    change2(ref people);
    Console.Write(people.Title); // MSP
    Console.ReadLine();
}
static void change(Student s)
{
    s.Title = "MSP";
}

static void change2(ref Student s)
{
    s.Title = "MSP";
}

Với case đầu tiên (dùng method change(Student s))

Vì people là một biến với kiểu dữ liệu có tham chiếu. Nên việc truyền vào method change và bị thay đổi là điều hiển nhiên.

Với case thứ hai (dùng method change2)

Cũng hiển nhiên đúng vì đã thêm từ khóa ref vào để hiểu rằng mình đang truyền kiểu tham chiếu.

Thế tại sao lại Student đã là Reference Type mà còn thêm ref?

Bạn cần phải luôn nhớ là trong C#, pass-reference-by-value là mặc định. Nó có nghĩa là khi bạn truyền 1 tham chiếu vào 1 method trong C# thì C# sẽ tạo ra 1 bản copy của tham chiếu đó, rồi thay đổi cái bản copy. Sau khi kết thúc Method thì nó sẽ gán tham chiếu ban đầu bằng cái copy và cái ban đầu sẽ bị lãng quên.

Vậy nếu thêm ref vào?

Khi bạn thêm ref vào, khi đó C# sẽ hiểu là bạn cần bỏ qua việc copy 1 cái tham chiếu đó. Khi đó reference parameter và original parameter đều cùng trỏ đến 1 cái original parameter ban đầu.

Tham khảo: MSDN Microsoft
Code Project

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Phạm Quốc Thắng

15 bài viết.
44 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
22 33
Chuẩn bị Một link bài hát / video từ mp3.zing.vn Nghịch ngợm Cũng vì dạo này mình hơi rảnh rỗi với có một chút phiền phức khi đang thưởng thức ...
Phạm Quốc Thắng viết hơn 2 năm trước
22 33
White
10 1
Bài viết này mình sẽ trình bày những thứ cơ bản về cú pháp với Swift. Bài viết sẽ gồm các phần Phần 1 Hằng và Biến Ghi chú Dấu chấm phẩy S...
Phạm Quốc Thắng viết hơn 2 năm trước
10 1
White
7 1
Disclaimer: Mình đã thông báo bug này cho support tenlua.vn 2 lần, và họ đã fix bằng cách upgrade 1 bản api ver 2, tuy nhiên api ver 1 vẫn hoạt độn...
Phạm Quốc Thắng viết hơn 2 năm trước
7 1
Bài viết liên quan
White
8 0
Chẳng là gần đây, công ty mình vưa tuyển thêm 1 anh Technical Lead. Đợt mình hỏi ông leader phỏng vấn thế nào, ổng nhận xét "Kiến thức base C khá v...
Huy Hoàng Phạm viết gần 3 năm trước
8 0
White
0 8
Bài viết demo về một hàm cắt chuỗi theo các loại thẻ yêu cầu sử dụng ngôn ngữ javascrip Chú ý : bài viết của mình mục đính chính tham khảo ý kiến...
Nguyễn Văn Phong viết gần 3 năm trước
0 8
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
15 bài viết.
44 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!