我对C#,WPF和OOP全新,并且遇到了对象问题。
我正在创建一个小型RPG,并且有一个Player类,它有一个构造函数自动为instanciated对象分配默认值。
因此,使用WPF / XAML,我创建了一个链接到函数的按钮;当我按下按钮时,将执行此功能:
private void NewGameClick(object sender, RoutedEventArgs e)
{
Player hero = new Player("Tristan");
MessageBox.Show("The character " + hero.Name + " has been created.");
}
消息框确实显示了角色的名称,但我无法使用"英雄"函数在我的其余代码中创建的对象。是因为在函数结束时删除了对象吗?有没有办法保留该对象并在该函数之外使用它?
谢谢!
答案 0 :(得分: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.");
}
}
然后,您可以在游戏private
中使用class
玩家对象。
答案 1 :(得分:1)
在函数内声明变量时,只能在函数范围内使用此变量。您必须使用班级的成员变量,或者返回此播放器。
答案 2 :(得分:1)
在你的课程之外宣布你的方法之外的球员。
答案 3 :(得分:1)
如果要在此方法之外使用hero对象,则应在此方法之外将其声明为全局变量。
或者更好甚至使用属性来访问,设置和获取英雄对象。
我建议在这里进一步阅读: http://www.dotnetperls.com/global-variable
答案 4 :(得分:1)
在函数内声明的变量具有函数本身的生命周期(技术上,由于垃圾收集器太聪明,可能比函数本身短)。您想要的是根据您的需要确定变量的范围。这意味着,它可以作为字段限定为类实例(即字段生命周期与类实例的生命周期无关),或者您可以将变量的范围设置为静态(即它的生命周期很长)应用程序,除非您清除或替换静态变量)
答案 5 :(得分:0)
将hero
变量设为您班级的字段。您也可以将该字段包装到Property中。