Yöntemin kendisinden bir yönteme geçirilen bir değeri değiştirmeniz gerektiğinde zamanlar vardır. Bir örnek, bu yöntem gibi bir dizeyi sterilize etmek olabilir:
void SanitizeName(string Name)
{
Name = Name.ToUpper();
//now do something here with name
}
Name
Argüman referansla aktarılmadığından bu tamamen zararsızdır . Ancak, bir nedenden dolayı, gelecekteki bir geliştirici tüm değerlerin ref tarafından iletilmesine karar verirse, dizenin herhangi bir dezenfekte edilmesi, zararlı sonuçlar doğurabilecek yöntemin dışındaki değeri etkileyecektir.
Bu nedenle, argümanın kendisine yeniden atamak yerine, her zaman böyle bir yerel kopya oluştururum:
void SanitizeName(string Name)
{
var SanitizedName = Name.ToUpper();
//now do something here with name
}
Bu, değerin iletildiği değerin değiştirilmesinin yöntemin dışındaki durumları asla etkilemeyeceğini garanti eder, ancak bu konuda aşırı paranoyak olup olmadığımı merak ediyorum.
if (param == NULL) param = default_value;
?
by ref
o geçmedi edildi ve yerel erişimi bir nedenden ötürü yerel olmayan bir erişime dönüştürmek için, sonuçları her zaman dikkatli bir şekilde kontrol etmesi gerekir.
Name = Name.ToUpper();
, kodun kafanızdakiName
değişikliklerin değeri olarak izlenmesini zorlaştırır . İkinci örneğiniz sadece geleceğe daha dayanıklı olmakla kalmaz, ne yaptığına karar vermek daha kolaydır.