Я знаю, что по умолчанию используется 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!
}
}
Обновление: Я добавил ниже как решение:
public static void InsertLicense(License license)
{
license = license.Clone();
...
}