将接口从vb.net转换为c#

时间:2010-10-01 15:27:48

标签: c# .net vb.net interface

我有一个控件覆盖受保护的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。明确但我必须得到错误的语法。

3 个答案:

答案 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)
     {
         ...
     }
}