gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:42:26 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