Переопределение методов в VB.NET (ошибка BC30284) - PullRequest
2 голосов
/ 13 мая 2009

В моем базовом классе есть переопределяемый сабвуфер

Project1:
Public Class BaseClass
    Protected Overridable Sub MySub(ByVal Parameter as MyType)
End Class

Project2:
Public Class DerivedClass
    Inherits BaseClass
    Protected Overrides Sub MySub(ByVal Parameter as MyType)
End Class

MyType - это тип, который поступает из внешней библиотеки COM. Когда я пытаюсь переопределить его в производном классе, я получаю

error BC30284: sub 'MySub' cannot be declared 'Overrides' because it does not override a function in a base class

Я добавил обязательную ссылку COM для обоих проектов, содержащих базовые и производные классы. Есть идеи, как избавиться от этой ошибки? Я использую VS2005 и .NET 2.0

Редактировать: все другие переопределения работают нормально, я получаю сообщение об ошибке только в том случае, если я использую ссылочные типы COM в качестве параметров. Если я изменяю параметр на объект, переопределение работает нормально.

Ответы [ 3 ]

4 голосов
/ 14 мая 2009

Рассматривали ли вы или пытались ли использовать TlbImp.exe для создания статической DLL из библиотеки типов COM и ссылаться на нее из обоих проектов (вместо использования ссылки COM), чтобы убедиться, что они ссылаются на точно так же? TlbImp включен в Visual Studio, но я не могу найти его в моей системе, если установлен только Visual Studio Express, поэтому, если вы используете Express, вам, возможно, придется искать его (связанная страница может иметь или не иметь Версия, которую вы хотите). Я подозреваю, что если у каждого проекта есть своя собственная ссылка на COM, Visual Studio может создавать отдельную оболочку COM для каждого проекта, и сгенерированные оболочки COM могут не полностью согласиться друг с другом, когда речь идет о сгенерированных GUID и тому подобном. Таким образом, создав и обойдя использование одной обертки, вы сможете устранить это как возможную проблему.

1 голос
/ 28 октября 2009

Пожалуйста, проверьте сигнатуру функции как в базовом, так и в производном классе, если у вас разные аггременты или тип данных, o любые аргументы не совпадают. Тогда вы получите этот тип ошибки. Просто проверьте имя функции, имя аргумента и тип данных. Это сработало у меня. Я надеюсь, что этот ответ будет полезным.

Спасибо, Раму V

1 голос
/ 05 июня 2009

Вместо использования TlbImp другой вариант заключается в создании отдельного проекта, в котором вы инкапсулируете MyType в класс .NET и включаете этот проект в оба примера.

Таким образом, вы получите промежуточный MyDotNetType, который будет принимать в качестве аргумента конструктора Mytype (объект COM) и выставлять его как свойство только для чтения. Затем вызов MySub будет принимать MyDotNetType в качестве аргумента.

С уважением

Noel

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