2013-12-13 194 views
2

我有一個類「工人」與條目方法爲什麼我的方法沒有被編譯器找到?

internal void Run() 
{ 
//do stuff... 
} 

我有用於測試的子類(「TestWorker:工作者」)與條目方法

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類中聲明一個虛擬的虛擬運行(對象)方法來解決這個問題,這樣我的TestWorker.Run(object)覆蓋它,但恕我直言,這是一個不雅的解決方案,爲什麼我必須這樣做呢?它是一個編譯器特異性,還是我在邏輯上做了一些不正確的事情?

回答

5

的問題是,的worker編譯時類型只是Worker - 有不是一個Worker.Run方法接受的參數。

這無關與代表本身 - 你將無法調用

worker.Run("foo"); 

無論是。解決這個問題的最簡單的方法就是將worker的聲明更改爲TestWorker。或者,使用一個單獨的本地變量:

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

我嘗試更改聲明,但在構建解決方案時反覆得到相同的錯誤 - 因此我的問題。但是我發現,通過明確清理項目並重建所有項目,錯誤消失了。也許這是VS2008的怪癖。 –

+0

@NeilHaughton:你爲什麼不在提問中提到*?它應該沒問題 - 請展示一個簡短但完整的程序來展示問題。我會同時拿出一個顯示它正在工作:) –

+0

@NeilHaughton:鑑於你現在已經接受了答案,大概你已經發現它的工作,畢竟,你會有一個不同的問題? –

相關問題