Интерфейс VB.net не компилируется, почему? - PullRequest
1 голос
/ 04 марта 2010

Вопрос: я пытаюсь преобразовать это здесь: http://support.microsoft.com/kb/828736 на VB.net

Я получил его для работы в C #, и он должен работать без проблем в VB.net, единственная проблема в том, что управляемый класс не будет компилироваться, я получаю эту ошибку:
Класс ошибок «ManagedClass» должен реализовать «Добавление функции (Number1 как целое число, Number2 как целое число) как целое число» для интерфейса ICalculator

Зачем? Я вижу, как объявлена ​​одна функция, а другая реализована, и это с теми же аргументами ... Что не так?

 Imports System
 Imports System.Collections.Generic
 Imports System.Text

Namespace TestLibrary2
' Interface declaration.
Public Interface ICalculator
    Function Add(ByVal Number1 As Integer, ByVal Number2 As Integer) As Integer
End Interface



' Interface implementation.
Public Class ManagedClass
    Implements ICalculator
    Public Function Add(ByVal Number1 As Integer, ByVal Number2 As Integer) As Integer
        Return Number1 + Number2
    End Function
End Class


End Namespace

Ответы [ 2 ]

5 голосов
/ 04 марта 2010

В VB.Net вы должны четко указывать на реализацию вашего интерфейса - это обеспечивает большую гибкость, чем C # (потому что вы можете называть свои функции как угодно), но это немного больше работы.

Public Function Add(ByVal Number1 As Integer, ByVal Number2 As Integer) As Integer Implements ICalculator.Add
    Return Number1 + Number2
End Function

Как уже упоминали М.А. Ханин и я - это позволяет вам выбирать имена, но никто из нас еще не упомянул, почему вы можете захотеть сделать это.Одним из примеров будет, если вы реализуете два интерфейса, которые оба определяют одно и то же имя метода.И вы хотите представить оба этих метода как общедоступные методы в вашем классе.В C # вам нужно создать хотя бы одну функцию-обертку, которая вызывает другую для достижения этой цели.

2 голосов
/ 04 марта 2010

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

  Public Function Add(ByVal Number1 As Integer, ByVal Number2 As Integer) As Integer Implements ICalculator.Add
        Return Number1 + Number2
    End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...