Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 方法返回值在更改为另一种形式后重置值_C#_Forms - Fatal编程技术网

C# 方法返回值在更改为另一种形式后重置值

C# 方法返回值在更改为另一种形式后重置值,c#,forms,C#,Forms,我有一个表格,表格2,其中包含一个刽子手游戏(是的,这是一个类似于我在上一个问题中提到的刽子手游戏),一旦玩家完成游戏,玩家将进入两个表格中的任何一个,表格4和表格6(一个是获胜的祝贺表格,另一个是失败的嘲笑/失败表格)在表格4和表格6中,都有一个标签,显示玩家从上一个表格2中获得的分数 我在表格2中放置了一个返回分数值的方法 public int getScore() { return score; } 然后在两种形式中,表格4和表格6,每种形式中都有这些代码 表格4 privat

我有一个表格,表格2,其中包含一个刽子手游戏(是的,这是一个类似于我在上一个问题中提到的刽子手游戏),一旦玩家完成游戏,玩家将进入两个表格中的任何一个,表格4和表格6(一个是获胜的祝贺表格,另一个是失败的嘲笑/失败表格)在表格4和表格6中,都有一个标签,显示玩家从上一个表格2中获得的分数

我在表格2中放置了一个返回分数值的方法

public int getScore()
{
    return score;
} 
然后在两种形式中,表格4和表格6,每种形式中都有这些代码

表格4

private void Form4_Load(object sender, EventArgs e)
{
    Form2 game = new Form2();
    lblFinalScore.Text += game.getScore().ToString(); 
}
表格6

private void Form6_Load(object sender, EventArgs e)
{
    Form2 game = new Form2();
    lblFinalScore.Text += game.getScore().ToString(); 
}
所以在通过Form2并玩游戏之后,例如,当我赢得游戏并得到7分,Form4出现时,lblFinalScore显示0。。。为什么?
请帮助…

如果使用new关键字,则创建Form2类的新实例。 这样,您将使用两个不同的实例。不同的实例具有不同值的数据字段

如果要从类的任何入口访问相同的数据字段,请使用static关键字。您可以将分数值存储在静态字段中,这样您就可以轻松访问它

如果在类中定义了静态字段,则可以从任何实例访问该字段。但是,不鼓励使用静态字段,因为这违反了基本的OO原则

例如:

class Program
    {
        static void Main(string[] args)
        {
            ExampleClass ex1 = new ExampleClass();
            ExampleClass ex2 = new ExampleClass();

            ex1.normalfield = "new value for ex1";
            ex2.normalfield = "new value for ex2";
            ExampleClass.staticfield = "static value";

            Console.WriteLine(ex1.normalfield);
            Console.WriteLine(ex2.normalfield);
            Console.WriteLine(ExampleClass.staticfield);

        }

        class ExampleClass
        {
            public string normalfield = "";
            public static string staticfield = "";
        }
}

在您的情况下,传递表单的原始实例可能是更好的方法。 这可以通过存储对表单的引用或实现Singleton模式来实现

然而,在我看来,最好的解决方案是解耦游戏逻辑的表示。您应该使用不同的类来实现游戏逻辑并存储连接到游戏的数据值,表单类只负责直观地显示表示游戏状态的对象的当前状态。

您正在创建两个不同的
Form2
实例。参考表格2的实际原始实例

Form4
Form6
上都有类级别变量,并从各自的构造函数中设置它。从Form2传递实例


请参阅。

因为您正在创建两个不同的
Form2
@RohitVats实例,那么我应该怎么做?将实际的
Form2
实例传递给其他表单,并使用它。