我有一个控件覆盖受保护的GetService方法并将其分配给IServiceProvider接口:
Class MyControl
Inherits Control
Implements IServiceProvider
Protected Overrides Sub GetService(t as Type) as Object Implements IServiceProvider.GetService
End Sub
End Class
我正在努力将其转换为c#。我试过隐式v。明确但我必须得到错误的语法。
答案 0 :(得分:7)
你会这样做:
class MyControl : Control, IServiceProvider
{
// Explicitly implement this
object IServiceProvider.GetService(Type t)
{
// Call through to the protected version
return this.GetService(t);
}
// Override the protected version...
protected override object GetService(Type t)
{
}
}
话虽如此,Control已经实现了IServiceProvider(通过Component)。你真的可以这样做:
class MyControl : Control
{
protected override object GetService(Type t)
{
}
}
答案 1 :(得分:4)
在移植到C#时,需要考虑VB.Net接口实现的一个角落问题。 VB.Net中实现的接口方法基本上在同一行中使用隐式和显式接口实现。这允许出现名称不匹配和非公开实现等情况。
例如,以下内容也是IServiceProvider
Class Example
Implements IServiceProvider
Private Sub GetServiceWrongName(t As Type) As Object Implements IServiceProvider.GetService
...
End Sub
End Class
它大致转换为以下C#代码
class Example : IServiceProvider {
public object GetServiceWrongName(t as Type) {
..
}
object IServiceProvider.GetService(t as Type) {
return GetServiceWrongName(t);
}
}
答案 2 :(得分:2)
原始的VB.NET方法受到保护,所以我猜它相当于C#中的显式接口实现:
class MyControl : Control, IServiceProvider
{
object IServiceProvider.GetService(Type t)
{
...
}
}