【发布时间】:2018-11-09 09:28:32
【问题描述】:
我正在学习 C#,但在其他语言中遇到了一个非常简单的问题,这让我很生气......我一定错过了一些明显的东西,但经过几个小时寻找和尝试解决方案后,我来了:p
我正在制作一个模拟蜂巢管理的程序。 在 Form1() 声明中,我初始化了 2 个变量,一个 Worker 对象数组和一个包含工蜂数组的 Queen 对象:
public Form1()
{
InitializeComponent();
Worker[] workers = new Worker[4];
workers[0] = new Worker(new string[] { "Nectar Collector", "Honey Manufacturing" });
workers[1] = new Worker(new string[] { "Egg Care", "Baby Bee Tutoring" });
workers[2] = new Worker(new string[] { "Hive Maintenance", "Sting Patrol" });
workers[3] = new Worker(new string[] { "Nectar Collector", "Honey Manufacturing", "Egg Care", "Baby Bee Tutoring", "Hive Maintenance", "Sting Patrol" });
Queen queen = new Queen(workers);
}
接下来,我的“Button1”用于将工作分配给蜜蜂,使用在 Form1() 中声明的 Queen 对象。 显然,它不在同一个范围内,因为在 Form1() 中声明了“queen”。 所以我在这段代码中得到一个错误:
private void button1_Click(object sender, EventArgs e)
{
if(***queen***.AssignWork(workerBeeJob.Text, (int)shifts.Value))
{
MessageBox.Show("The job '" + workerBeeJob.Text + "` will be done in");
}
“实际上下文中不存在“女王”这个名字。
如果我尝试在我的班级范围内实例化一个 Queen 对象(简单地使用“Queen queen;”...),我不能向他传递一个 Workers 数组,也不能使用她,因为她的 workers 数组是空的。 如果我尝试实例化一组工人,似乎可以创建他(“Worker[] workers = New Worker[4];”),但不能实例化他的价值观(“workers[0] = ....” ),此时,我的所有代码都带有很好的红色下划线,而相同的代码在 Form1() 方法中就像一个魅力。
以下是问题:
- 如果不能在其他方法中使用组件,为什么还要在 Form1() 中初始化组件?
- 如果我直接在 Form1 类中初始化 Workers 数组,为什么会出现大量错误?
- 显然,我如何在事件监听器中使用我的 Queen 和她的 Worker 数组?
对不起,如果我不清楚并且对于这么简单的问题有很多问题。我读过很多帖子,尤其是这篇帖子:C# referencing a variable from another method,但它没有回答我的问题。
【问题讨论】:
-
因为该变量是在构造函数
public Form1()的范围内定义的,因此只能在那里使用。在外部声明它以使其具有全局范围。
标签: c# visual-studio scope