我有一个在构造函数中创建计时器的类。
计时器完全可以执行我需要的操作,但是我也希望能够使用.Stop();。和.Start();在主程序中。
不仅如此,但这足以重现我的确切问题。
在下面的示例中,我可以访问Monsters [index] .M_timer,但是.Stop();出现错误。
class Program
{
static void Main(string[] args)
{
int index = 0;
string name = "Spider";
monster[] Monsters = new monster[100];
Monsters[index] = Create_Monster(name);
/*
Monsters[1].M_timer.Stop(); <- not how I will be using this but I need the functionality here
*/
}
public static monster Create_Monster(string _name)
{
int timer = 0;
if (_name == "Spider")
{
timer = 4000;
}
monster build = new monster(false, timer);
return build;
}
}
class monster
{
public bool can_act;
public int _timer;
public object M_timer;
public monster(bool _can_act, int _timer)
{
can_act = _can_act;
Timer M_timer = new Timer();
M_timer.Interval = _timer;
M_timer.AutoReset = true;
M_timer.Enabled = true;
M_timer.Elapsed += TimerEvent;
}
public void TimerEvent(object source, ElapsedEventArgs e)
{
can_act = true;
}
}
答案 0 :(得分:1)
乍看之下,您似乎有几个问题。首先是范围。您的构造函数中有一个名为M_timer的变量,它覆盖了类字段M_timer。您没有在此处作用相同的对象。您必须说类似this.M_timer = M_timer.
第二个问题是,由于要使用类字段,因此必须对其进行强制转换,因为它是通用对象。因此您必须说类似((Timer)Monsters[1].M_timer).Stop()
答案 1 :(得分:0)
该死,我应该再给几分钟时间:
公共对象M_timer;
替换为
公共计时器M_timer;