Правильный интерфейс (реализует) синтаксис для метода класса с подписью (Of T As Class) () As T - PullRequest
0 голосов
/ 25 июня 2019

Мне трудно определить правильный интерфейс или фактическую сигнатуру / синтаксис реализации для метода.Сам метод работает, как и ожидалось, компилятор по крайней мере не жалуется на синтаксис интерфейса, но при добавлении в метод необходимого оператора Implements он завершается неудачей.

Вот что у меня есть:

Public Interface IMyInterface
   Function GetIt(Of T As Class)() As T
End Interface

Public Class Foo
   Implements IMyInterFace

   Public Function GetIt(Of T As Class)() As T
End Class

Если я сейчас попытаюсь добавить необходимый оператор Implements, даже используя автозаполнение из всплывающего окна IntelliSense, VS жалуется на синтаксис.Без оператора Implements VS жалуется:

BC30149 Класс 'Foo' должен реализовывать функцию GetIt (Of T As Class) () As T для интерфейса IMyInterface.

Во-первых, выполнение с помощью автозаполнения заканчивается следующей неполной строкой:

Public Function GetIt(Of T As Class)() As T Implements IMyInterface.GetIt(Of

VS явно жалуется на a)

'Тип ожидаемый'

и b)

')' ожидается

Во-вторых, после завершения этой строки с

Public Function GetIt(Of T As Class)() As T Implements IMyInterface.GetIt(T As class) As T

VS все еще сообщает

')' ожидается

и указывает на «A» в определении параметра «Как класс».

Так какой же правильный синтаксис для этоготип подписи метода?

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

Вы оба правы, решение

Public Function GetIt(Of T As Class)() As T Implements IMyInterface.GetIt

У меня также была идея позволить VS выполнить рефакторинг ( Edit -> Refactor -> Extract Interface ), и выше было то, что VS сделал таким образом. Мне все еще странно, что автодополнение VS (2017) дает другой результат.

0 голосов
/ 25 июня 2019

MyClass - это ключевое слово , поэтому вы не можете назвать этот класс.

Во избежание этого вы можете закрыть ключевые слова в квадратных скобках в VB.NET.

Public Interface IMyInterface
    Function GetIt(Of T As Class)() As T
End Interface

Public Class [MyClass]
    Implements IMyInterface

    Public Function GetIt(Of T As Class)() As T Implements IMyInterface.GetIt
        Throw New NotImplementedException()
    End Function
End Class

Но так как это всего лишь подтверждение концепции, ваша реальная реализация, вероятно, не пострадает от этой проблемы.

Кстати, я голосую, чтобы закрыть ваш вопрос, потому что это больше вопрос об использовании MyClass в качестве имени класса. Если бы вы этого не сделали, ваше автозаполнение наверняка сгенерировало бы правильную сигнатуру метода. Вместо этого ваша IDE смутилась из-за неуместного ключевого слова. Я надеюсь, что это помогло вам решить вашу проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...