2010-05-19 59 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