2010-05-19 60 views
1

暴露事件中,我有這個接口錯誤通過接口

Interface IProDataSource 

    Delegate Sub DstartingHandler(ByVal sender As Object, ByVal e As EventArgs) 
    Event starting_Sinc As DstartingHandler 

End Interface 

嘗試使用接口這樣

Public Class DataSource : Implements IProDataSource 

    Public Event starting_Sinc As DstartingHandler Implements IProDataSource.starting_Sinc 
    Public Delegate Sub DstartingHandler(ByVal sender As Object, ByVal e As EventArgs) 

End Class 

給我的下一個錯誤

事件「starting_Sinc」無法實現 接口 'IProDataSource'事件'starting_Sinc',因爲它們的 代表類型'DstartingHandler'和 'IProDataSource.DstartingHandler'do 不匹配。

回答

1

你需要移動的委託聲明的接口外,申報公開。當實現它們的類是公共的時,接口使用的所有類型都必須是公共的。必要的或客戶端代碼永遠不會分配事件。因此:

Public Delegate Sub DstartingHandler(ByVal sender As Object, ByVal e As EventArgs) 

Interface IProDataSource 
    Event starting_Sinc As DstartingHandler 
End Interface 

Public Class DataSource : Implements IProDataSource 
    Public Event starting_Sinc(ByVal sender As Object, ByVal e As System.EventArgs) Implements IProDataSource.starting_Sinc 
End Class 

如果限制類的可訪問性,你可以使用你原來的做法:

Interface IProDataSource 
    Delegate Sub DstartingHandler(ByVal sender As Object, ByVal e As EventArgs) 
    Event starting_Sinc As DstartingHandler 
End Interface 

Friend Class DataSource : Implements IProDataSource 
    Public Event starting_Sinc(ByVal sender As Object, ByVal e As System.EventArgs) Implements IProDataSource.starting_Sinc 
End Class 
+0

嘿!第一種方法完美地工作,第二種方法給了我一個錯誤,但我會去使用第一個。 錯誤「starting_Sinc」不能露出下面的委託類型是 感謝很多實施項目之外,通過階級「數據源」事件的「IProDataSource.DstartingHandler」! – carlos 2010-05-20 17:58:07

1

之所以您現在有2個代表在您的應用程序中定義的代表DstartingHandler的實例。一個在DataSource裏面,另一個在IProDataSource裏面。 DataSource中的那個似乎是一個錯誤,刪除它應該可以解決所有的問題。

編輯

我嘗試下面的代碼並將其編譯

Class C1 
    Implements IProDataSource 

    Public Event starting_Sinc(ByVal sender As Object, ByVal e As System.EventArgs) Implements IProDataSource.starting_Sinc 
End Class 
+0

我alreade嘗試,並得到了一個錯誤 「starting_Sinc」無法實現「starting_Sinc」,因爲接口「IProDataSource」 – carlos 2010-05-19 20:50:45

+0

@carlos上沒有匹配事件,下一步是您需要將委託參數展開到事件中,如我在更新後的答案中所示。儘管我不知道爲什麼這是必要的。 – JaredPar 2010-05-19 20:57:49