Sé que el valor predeterminado es ByVal en C#. Usé los mismos nombres de variable en muchos lugares y luego noté que los valores pasados cambian y vuelven. Creo que sabía que el mecanismo de alcance de C# era incorrecto. Aquí, la licencia pública prevalece sobre la licencia local de valores. Sé que puedo cambiar fácilmente el nombre de los nombres de las variables en conflicto, pero me gustaría aprender los hechos sobre el alcance.C# Al pasar los argumentos por defecto es ByRef en lugar de ByVal
public static class LicenseWorks
{
public static void InsertLicense(License license)
{
license.registered = true;
UpdateLicense(license);
}
}
public partial class formMain : Form
{
License license;
private void btnPay_Click(object sender, EventArgs e)
{
license.registered = false;
LicenseWorks.InsertLicense(license);
bool registered = license.registered; //Returns true!
}
}
Actualización: he añadido a continuación como solución:
public static void InsertLicense(License license)
{
license = license.Clone();
...
}
OK consiguió pensé que haya sido duplicada. –