如何从方法外部访问C#中的对象?

4

我完全不懂C#,WPF和OOP,并且在对象方面遇到了问题。

我正在创建一个小型RPG,其中有一个Player类,该类具有构造函数,自动为实例化的对象分配默认值。

因此,使用WPF / XAML,我创建了一个按钮,该按钮链接到一个函数; 当我按下按钮时,将执行此函数:

private void NewGameClick(object sender, RoutedEventArgs e)
{
    Player hero = new Player("Tristan");

    MessageBox.Show("The character " + hero.Name + " has been created.");
}

消息框确实显示了角色的名称,但我不能在代码的其余部分使用由函数创建的“hero”对象。这是因为对象在函数结尾时被删除吗?有没有办法保留那个对象并在该函数之外使用它?
谢谢!

2
你需要在函数外声明英雄对象... - Sparky
6个回答

10

hero对象仅存在于NewGameClick方法中,在该方法执行完后将超出范围。

您可以在方法外部声明对象,这样它将处于该类的作用域内。例如:

public class Game 
{
    Player hero = new Player("Tristan");

    private void NewGameClick(object sender, RoutedEventArgs e)
    {       
        MessageBox.Show("The character " + hero.Name + " has been created.");
    }
}

然后在Game class内部有一个private的Player对象可供使用。


1

当你在函数内声明一个变量时,你只能在函数的范围内使用这个变量。你必须使用类的成员变量,或返回这个玩家。


1
在类的顶部声明玩家,在方法之外。

1
如果你想在这个方法之外使用hero对象,那么你应该将它声明为全局变量。或者更好的方式是使用属性来访问、设置和获取hero对象。我建议在这里进一步阅读:http://www.dotnetperls.com/global-variable

1
函数内声明的变量仅在函数本身存在(技术上,可能比函数本身寿命更短,因为垃圾回收器太聪明了)。您需要根据自己的需求对变量进行范围限定。这意味着,它可以作为类实例的字段进行范围限定(即,字段的生命周期与类实例的生命周期无关),或者您可以将变量范围限定为静态(即,它的寿命几乎为整个应用程序的寿命,除非您清除或替换静态变量)。

0
hero变量作为您的类的字段。您还可以将该字段包装到属性中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接