C#のデフォルトはByValです。同じ変数名を多くの場所で使用し、渡された値が変更されて戻ってきたことに気付きました。私はC#のスコープメカニズムが間違っていると思っています。ここでは公開ライセンスはローカルライセンスの値を上書きします。私は紛争で変数名の名前を簡単に変更できることを知っていますが、範囲についての事実を学びたいと思います。C#デフォルトで引数を渡すのは、ByValの代わりにByRefです。
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();
...
}
OKこれは重複していると思いました。 –