将值保存在稍后要使用的类中

时间:2017-12-17 12:43:33

标签: c#

我对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个护甲添加到我的英雄类并保存值,然后用它做我想做的事。我希望这是有道理的,因为它确实对我而言

3 个答案:

答案 0 :(得分:4)

每次创建类的新实例时,都会有 new 实例。对新任何实例所做的更改将不会出现在新实例中。

考虑一个类比......一辆汽车从工厂生产线上滚下来。当它从工厂出来时,你把一个袋子放在行李箱里。片刻之后,另一辆相同的汽车从工厂出来。它在各个方面与第一个完全相同。如果你打开第二辆车的行李箱,你会期望在那里找到你的行李吗?

您有几个选择:

  1. 在整个预期逻辑中维护对象的相同实例。对于任何正在进行的逻辑过程,这通常是有意义的存在一个对象,应该在需要的地方传递。您不会期望必须继续创建所有内容的新实例。
  2. 将对象的状态(数据)保留在某处,以便以后可以重新加载状态。这通常适用于您不希望在内存中维护状态的系统,例如Web应用程序。或者您期望应用程序终止的任何系统,并且您希望在下次运行时从中断处继续。
  3. (从技术上讲,我认为使用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答案)中使用它直到您没有关闭您的应用程序。