Преобразование Inteface из vb.net в c # - PullRequest
1 голос
/ 01 октября 2010

У меня есть элемент управления, который переопределяет защищенный метод 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 ]

7 голосов
/ 01 октября 2010

Вы бы сделали это так:

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 (через Компонент). Вы действительно можете просто сделать:

class MyControl : Control
{
     protected override object GetService(Type t)
     {
     }
}
4 голосов
/ 01 октября 2010

Существует небольшая проблема в реализации интерфейса VB.Net, которую необходимо учитывать при портировании на C #.Реализованный метод интерфейса в 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 голосов
/ 01 октября 2010

Оригинальный метод VB.NET защищен, поэтому я думаю, что это эквивалент явной реализации интерфейса в C #:

class MyControl : Control, IServiceProvider
{
     object IServiceProvider.GetService(Type t)
     {
         ...
     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...