gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 21:40:22 25 4
gpt4 key购买 nike

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

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");

这不会编译,编译器报告找不到参数化委托(delegate)(在我的子类中)。我可以通过在 Worker 类中声明一个虚拟虚拟 Run(object) 方法来克服这个问题,这样我的 TestWorker.Run(object) 就会覆盖它,但恕我直言,这是一个不优雅的解决方案,那么为什么我必须这样做呢?这是编译器的特性,还是我做了一些逻辑上不正确的事情?

最佳答案

问题是 worker 的编译时类型只是 Worker - 并且不是一个 Worker。 Run 方法接受参数。

这与委托(delegate)本身无关 - 您无法调用

worker.Run("foo");

也可以。解决此问题的最简单方法是将 worker 的声明更改为 TestWorker。或者,使用单独的局部变量:

TestWorker testWorker = new TestWorker();
workerThread = new Thread(new ParameterizedThreadStart(testWorker.Run));
worker = testWorker;

关于c# - 为什么编译器找不到我的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20564238/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com