我知道默认是C#中的ByVal.我在很多地方使用了相同的变量名,然后我注意到传递的值改变了并且回来了.我想我知道C#的范围机制是错误的.此处,公共许可证会覆盖本地许可证值.我知道我可以轻松地重命名冲突中的变量名称,但我想了解有关范围的事实.
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!
}
}
Run Code Online (Sandbox Code Playgroud)
更新:我在下面添加了解决方案:
public static void InsertLicense(License license)
{
license = license.Clone();
...
}
Run Code Online (Sandbox Code Playgroud) c# ×1