2014-10-11 67 views
4

我对C#,WPF和OOP完全陌生,并且面临着对象的问题。如何从我的方法外部访问c sharp中的对象?

我正在创建一个小型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."); 
} 

消息框确实显示了角色的名字,但我不能使用由函数创建的“英雄”对象的其余部分我码。是否因为该对象在函数结束时被删除?有什么方法可以保留该对象并在该函数之外使用它?

谢谢!

+2

你需要声明功能外的英雄对象... – Sparky 2014-10-11 21:45:16

回答

9

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."); 
    } 
} 

然后,您将游戏classprivate Player对象一起工作。

1

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

1

在您的课堂之外声明您的方法以外的玩家。

1

如果你想在这个方法之外使用英雄对象,那么你应该在这个方法之外声明它为全局变量。

甚至可以使用属性访问,设置和获取英雄对象。

我会建议在这个位置的一些进一步阅读: http://www.dotnetperls.com/global-variable

0

充分利用hero变量的类的字段。您也可以将该字段包装到属性中。

1

在函数内声明的变量具有函数本身的生命周期(从技术上讲,由于垃圾收集器太聪明,可能比函数本身更短)。你想要的是根据你的需要来确定变量的范围。也就是说,它可以作为一个字段的类实例(即字段的生命周期不与类实例的生命周期关联),或者你可以将变量的范围设置为静态的(即它的生命周期几乎是整个生命周期应用程序,除非你清除或替换静态变量)

相关问题