我遇到以下代码的问题:
public class Player
{
public int money;
public void setMoney(int amount)
{
money = amount;
}
}
public void init()
{
Player Player1 = new Player();
}
public void main()
{
Player1.money = 9001;
}
private void mainForm_Load(object sender, EventArgs e)
{
init();
main();
}
当我运行给定的代码时,我得到一个错误,即Player1在该上下文中不可用。 所以我想我不能在init中创建一个Player对象,然后在main中使用它。
我该如何解决这个问题?
问候,dncrft
答案 0 :(得分:2)
您在Player
中声明init()
的实例,C#
中的变量范围规则定义您不能在其定义的范围之外使用变量。因此Player1
仅可在init()
中访问。如果您想在init()
之外使用它,您应该在main()
public class Player
{
public int money;
public void setMoney(int amount)
{
money = amount;
}
}
Player Player1;
public void init()
{
Player1 = new Player();
}
public void main()
{
Player1.Money = 9001;
}
private void mainForm_Load(object sender, EventArgs e)
{
init();
main();
}
代码中的一些问题:
1. Player.money
是字段,如果它有一个setter,请尝试将其设置为私有并使用setter和getter或将其设置为属性public int money { set; get; }
2.考虑naming conventions in C#
3.考虑使用nested classes
所以我建议这段代码
public class Player
{
public int Money { get; set; }
}
public MainForm : Form
{
private Player player1;
public void Init()
{
this.player1 = new Player();
}
public void Main()
{
this.player1.money = 9001;
}
private void mainForm_Load(object sender, EventArgs e)
{
Init();
Main();
}
}
答案 1 :(得分:2)
您的问题是Player
的实例超出了范围。此外,您可能希望使用您的财产的速记声明。
public class Player
{
public int Money {get; set;}
}
public void main()
{
Player player = new Player();
player.Money = 9001;
}