我有一个带有输入方法的“工人”类
internal void Run()
{
//do stuff...
}
我有一个带有输入方法的测试子类(“ TestWorker:Worker”)
internal void Run(object aParam)
{
//do something with aParam, then..
Run();
}
我有一个测试应用程序,可以在新线程中启动TestWorker实例,
Worker worker;
Thread workerThread;
...
worker = new TestWorker();
workerThread = new Thread(new ParameterizedThreadStart(worker.Run));
workerThread.Start("something");
这不会编译,并且编译器报告找不到参数化的委托(在我的子类中)。我可以通过在Worker类中声明一个虚拟的虚拟Run(object)方法来克服该问题,这样我的TestWorker.Run(object)会覆盖它,但是恕我直言,这是一个不佳的解决方案,那么为什么我必须这样做呢?是编译器特质,还是我在逻辑上做错了什么?
的问题是,的编译时间类型worker
仅仅是Worker
-有没有一个Worker.Run
接受的参数方法。
这与代表本身无关-您将无法致电
worker.Run("foo");
要么。解决此问题的最简单方法就是更改worker
be的声明TestWorker
。或者,使用单独的局部变量:
TestWorker testWorker = new TestWorker();
workerThread = new Thread(new ParameterizedThreadStart(testWorker.Run));
worker = testWorker;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句