【发布时间】:2021-11-08 06:04:20
【问题描述】:
我知道默认值是 C# 中的 ByVal。我在很多地方使用了相同的变量名,然后我注意到传递的值发生了变化并回来了。我想我知道 C# 的作用域机制是错误的。这里公共 license 覆盖本地 license 值。我知道我可以轻松地重命名冲突的变量名,但我想了解有关范围的事实。
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();
...
}
【问题讨论】:
-
虽然我完全同意 gt6707a,但我还没有什么声誉可以评论。在那之前的答案,有条件地是有意义的,如果我们给窗帘词\短语赋予窗帘含义(比如 - “它是按值传递的......”意味着“引用是从新的”),那将是不寻常的。事实上,即使明确提及,引用类型也不是按值传递的。就是这样。
标签: c#