Đôi khi tôi sẽ cần phải sửa đổi một giá trị được truyền vào một phương thức từ bên trong chính phương thức đó. Một ví dụ sẽ là vệ sinh một chuỗi như phương thức này ở đây:
void SanitizeName(string Name)
{
Name = Name.ToUpper();
//now do something here with name
}
Điều này hoàn toàn vô hại vì Name
đối số không được thông qua bởi tham chiếu. Tuy nhiên, nếu vì một lý do nào đó, một nhà phát triển trong tương lai quyết định chuyển tất cả các giá trị bằng ref, thì việc khử trùng chuỗi sẽ ảnh hưởng đến giá trị bên ngoài phương thức có thể có kết quả bất lợi.
Do đó, thay vì tự gán lại cho đối số, tôi luôn tạo một bản sao cục bộ như vậy:
void SanitizeName(string Name)
{
var SanitizedName = Name.ToUpper();
//now do something here with name
}
Điều này đảm bảo rằng việc thay đổi giá trị được truyền vào sẽ không bao giờ ảnh hưởng đến các phương pháp bên ngoài phương thức, nhưng tôi tự hỏi liệu tôi có bị hoang tưởng quá mức về điều này không.
if (param == NULL) param = default_value;
?
by ref
không được thông qua Vì lý do nào đó, và vì vậy chuyển đổi quyền truy cập cục bộ sang quyền truy cập không phải cục bộ vì một số lý do, anh ta luôn phải kiểm tra hậu quả một cách cẩn thận.
Name = Name.ToUpper();
làm cho mã khó theo dõi hơn trong đầu bạn khi giá trị của cácName
thay đổi. Ví dụ thứ hai của bạn không chỉ là bằng chứng trong tương lai, dễ dàng hơn để lý giải những gì nó đang làm.