为什么编译器找不到我的方法?

hau*_*ous 2 .net c#

我有一个带有入口方法的类"Worker"

internal void Run()
{
//do stuff...
}
Run Code Online (Sandbox Code Playgroud)

我有一个用于测试的子类("TestWorker:Worker")和一个入口方法

internal void Run(object aParam)
{
//do something with aParam, then..
Run();
}
Run Code Online (Sandbox Code Playgroud)

我有一个测试应用程序,它在一个新线程中启动TestWorker实例,

        Worker worker;
        Thread workerThread;
...
        worker = new TestWorker();
        workerThread = new Thread(new ParameterizedThreadStart(worker.Run));
        workerThread.Start("something");
Run Code Online (Sandbox Code Playgroud)

这将无法编译,编译器报告无法找到参数化委托(在我的子类中).我可以通过在Worker类中声明一个虚拟的虚拟Run(object)方法来解决这个问题,这样我的TestWorker.Run(对象)会覆盖它,但是恕我直言,这是一个不优雅的解决方案,所以为什么我必须这样做呢?它是编译器的特质,还是我在逻辑上做错了什么?

Jon*_*eet 5

问题是编译时类型worker只是Worker- 并且没有Worker.Run接受参数的方法.

这与代表本身无关 - 你无法打电话

worker.Run("foo");
Run Code Online (Sandbox Code Playgroud)

无论是.解决这个问题的最简单的方法就是改变的声明workerTestWorker.或者,使用单独的局部变量:

TestWorker testWorker = new TestWorker();
workerThread = new Thread(new ParameterizedThreadStart(testWorker.Run));
worker = testWorker;
Run Code Online (Sandbox Code Playgroud)