在C#中更改方法中的几个变量,以便Main()识别
我在Main中声明了两个变量,并在一个非静态方法中更改了这两个变量,该方法接收一些变量(包括我更改的两个),然后返回另一个变量,但在使用return()之后,Main无法识别对其他变量的更改;,并且这些值不断重置。如何使其识别这些更改在C#中更改方法中的几个变量,以便Main()识别,c#,non-static,C#,Non Static,我在Main中声明了两个变量,并在一个非静态方法中更改了这两个变量,该方法接收一些变量(包括我更改的两个),然后返回另一个变量,但在使用return()之后,Main无法识别对其他变量的更改;,并且这些值不断重置。如何使其识别这些更改 string Attack(int Mhp, int Chp, int Cdmg, int Mdmg, string charname) { string res; Mhp -= Cdmg; Chp
string Attack(int Mhp, int Chp, int Cdmg, int Mdmg, string charname)
{
string res;
Mhp -= Cdmg;
Chp -= Mdmg;
Console.WriteLine();
res=charname + "'s Health has been reduced to " + Chp +", and Monster's Health reduced to " + Mhp;
return(res);
}
Mhp和Chp与我在Main()中声明的相同;,如果角色的健康状况不断重置,则使我的代码毫无意义
提前谢谢 使用
string Attack(ref int Mhp, ref int Chp, int Cdmg, int Mdmg, string charname)
当您想在过程内部更改值类型时,必须通过引用传递它。这是C#琐事-阅读上面的内容:)原语是通过值而不是引用传递给函数的。。。所以您正在更改变量的副本。。。“原始”从未看到更改…Integer是一种值类型,它通过复制而不是引用传递给方法。您正在更改副本,而原始值保持不变。通过引用传递值类型,或者创建将保存整数值的引用类型
Character
,并将字符传递给此方法
事件处理程序:
static void CharacterHealthChanged(Character characer)
{
if (!characer.IsAlive)
Console.WriteLine("{0} was killed", characer.Name);
else
Console.WriteLine("{0}'s health reduced to {1}",
characer.Name, characer.Health);
}
输出
Monster's health reduced to 130
Bob's health reduced to 90
Monster's health reduced to 60
Bob's health reduced to 80
Monster is dead
您必须明确引用它们:
int something = 5;
CallMethod(ref something);
private void CallMethod(ref int x) {
x += 10;
}
Console.WriteLine(something); // Output: 15
现在这样做只会更改方法内部的值,而不会将这些更改反映到方法外部的变量。整数是值类型,这意味着它们将按值发送。您必须明确定义它们作为引用发送。在我看来,最好在类中全局声明Mhp和Chp(或包含它们的结构/类)。 如果确实希望在main中声明它们,请使用ref关键字,以便程序将对main的var的引用传递给攻击函数,而不是包含在发出攻击调用时从它们获取的值的浅层副本
string Attack(ref int Mhp, ref int Chp, int Cdmg, int Mdmg, string charname)
注意,我建议的第一种方法要简单得多(声明类级变量),因为这样类的任何成员方法都可以直接(而不是通过引用)访问它们
干杯旁注:长变量名没有坏处。参数通常以
camelCase
符号表示。
int something = 5;
CallMethod(ref something);
private void CallMethod(ref int x) {
x += 10;
}
Console.WriteLine(something); // Output: 15
string Attack(ref int Mhp, ref int Chp, int Cdmg, int Mdmg, string charname)