我对c#很陌生,所以我不知道该怎么做,我想将一个值保存到另一个类。这很难解释,但这就是我得到的。 https://pastebin.com/UU7vjuqK(我知道它非常混乱)
class hero {
private int _armor = 0;
public int armor
{
get { return _armor; }
set
{
if (value <= 0)
{
_armor = 0;
}
else if (value >= 20)
{
_armor = 20;
}
else
{
_armor = value;
}
}
}
}
所以我想要的是将步兵()方法中的英雄护甲提高5点。然后我想将这5个护甲添加到我的英雄类并保存值,然后用它做我想做的事。我希望这是有道理的,因为它确实对我而言
答案 0 :(得分:4)
每次创建类的新实例时,都会有 new 实例。对新任何实例所做的更改将不会出现在新实例中。
考虑一个类比......一辆汽车从工厂生产线上滚下来。当它从工厂出来时,你把一个袋子放在行李箱里。片刻之后,另一辆相同的汽车从工厂出来。它在各个方面与第一个完全相同。如果你打开第二辆车的行李箱,你会期望在那里找到你的行李吗?
您有几个选择:
(从技术上讲,我认为使用static
值将是第三种选择。但是这个选项在这里似乎没有多大意义。你不会为 all <没有一个“护甲”值/ em>“hero”对象。每个对象都有自己的。)
您想要采取哪个方向取决于您。第一个最简单的例子可能只是将一个对象传递给一个方法。类似的东西:
var myHero = new Hero();
myHero.Armor += 5;
SomeMethod(myHero);
// elsewhere...
void SomeMethod(Hero aHero)
{
// here, "aHero" has an armor increased by 5
}
上面的第二个选项当然会让稍微更复杂,因为你需要编写可以保存和恢复状态的代码。这将是开始使用数据库的好机会。一旦你克服了解数据库是什么以及如何设置它的学习曲线,实体框架等框架就可以在代码中轻松完成。
答案 1 :(得分:0)
你必须在Walk方法之外创建一个Hero实例。像这样:
public static void Main()
{
var hero = new Hero();
hero.Walk();
Console.WriteLine(String.Format("Current Armo: {0}", hero.Armor));
hero.Walk();
Console.WriteLine(String.Format("Current Armo: {0}", hero.Armor));
}
public class Hero
{
public int Armor { get; set; }
public void Walk()
{
this.Armor += 5;
}
}
此处运行的代码: https://dotnetfiddle.net/5LDC0g
祝你好运
答案 2 :(得分:0)
所以你应该知道我们有3种存储方式。
如果后者可以在关闭应用程序之后的任何时间或...你应该使用数据库(或开始学习我提供给你storing data in a text file) 像这样:
string file_name = "c:\\file.txt";
System.IO.StreamWriter objWriter;
objWriter = new System.IO.StreamWriter(file_name, true);
objWriter.Write(armor);
在这里你可以将你的盔甲写在一个文件中,每次你需要时你可以read the file这样:
string armor= System.IO.File.ReadAllText(@"C:\file.txt");
所以你可以在上课时使用这两个步骤;或设定;护甲值。
另外两种存储数据的方法是缓存中长或将其存储在您班级的对象(如David答案)中使用它直到您没有关闭您的应用程序。