Thực ra tôi thích phong cách thứ hai là phương pháp này là một mutator, do đó, một giá trị mới có thể sẽ không được trả lại, thay vì giá trị thực tế dự kiến sẽ được sửa đổi. Tuy nhiên bạn có thể cần phải chỉ ra rằng ModifyIt chấp nhận một biến ref chỉ để chỉ ra rằng c thực tế sẽ được sửa đổi. c ở đây được chuyển bởi giá trị, mặc dù đó là một kiểu tham chiếu, vẫn có sự khác biệt giữa việc chuyển các kiểu tham chiếu theo giá trị và chuyển kiểu tham chiếu theo ref. Thấy như sau:
public void ModifyIt(Myclass c) { c = new MyClass(); }
trong trường hợp trên biến c sẽ được truyền theo giá trị (tức là một bản sao từ tài liệu tham khảo sẽ được thông qua và sửa đổi để trỏ đến một đối tượng mới instanitiated, do đó có nghĩa là bạn sẽ có hai đối tượng của kiểu MyClass trong trường hợp này Dưới đây là một ví dụ để minh họa:.
Myclass s = new MyClass() { prop = "value" }; ModifyIt(s); Console.WriteLine(s.prob); // this will print "value"
dù MOdifyIT instanitaited các referenct đến một đối tượng mới mà nên có nghĩa prob sẽ được khởi tạo null, nó thực sự didn' t instantiate s, nó khởi tạo một bản sao của s. không giống như ca se nếu s được thông qua bởi ref.
Hy vọng điều này sẽ hữu ích!
Tại sao bạn chuyển 'Lớp x' làm tham số cho ModifyIt()? Phương pháp của bạn không chỉ lấy trường hợp Lớp là 'cái này'? Với mã bạn có tất cả các câu trả lời khác liên quan đến chuỗi sẽ không hoạt động thực sự. Đối với tôi câu hỏi sẽ là nếu lớp của bạn có nhiều hơn một loại giá trị, trong trường hợp đó bạn không nên sửa đổi các trường hợp của bạn, mà là trả lại một trường hợp mới với kết quả của hoạt động. – van