Пространство имен и базовый класс не распознаются. Почему? - PullRequest
0 голосов
/ 09 мая 2020

Итак, я работаю над проектом, который мне кто-то дал.

В проекте есть основной Namespace, назовем его «Program». В этом пространстве имен находится несколько разных классов.

Теперь мне пришлось наследовать класс в пространстве имен Devices. Уже был другой класс, производный от объекта Device. Итак, я пошел дальше, создал свой класс, включил его в пространство имен Devices, унаследовал его от Device и выполнил свою работу.

Но вскоре после этого я не смог использовать ни одну из базовых переменных, методов и так далее. Весь intellisense не работает с этим классом. И что еще хуже, кажется, что он не включен в сборку.

Как я могу заставить мой класс распознаваться Intellisense, сборкой и так далее? Я сделал тестовый класс, который выглядел только так:

Namespace Devices
    Class Testcle
        ' ... Nothing
    End Class
End Namespace 

И он работал отлично. Он был включен в сборку, Intellisense работал и т.д. c.

Структура папок выглядела примерно так:

[Project]
↳ [-] Devices (Folder and Namespace)
    [-] AlreadyExistingClassDerivedFromDevice (Folder)
        ↳ AlreadyExistingClassDerivedFromDevice.vb
    [-] MyClassDerivedFromDevice (Folder)
        ↳ MyClassDerivedFromDevice.vb
↳ [+] Other (Folder)
↳ Testcle.vb
↳ Device.vb

Что-то мне не хватает? Например, есть ли скрытый параметр, который мне нужно активировать?


Изменить: объявления выглядят примерно так (но в разных файлах):

Device.vb

Namespace Devices
    Public MustInherit Class Device
    ' ...
    End Class
End Namespace

Это работает:

AlreadyExistingClassDerivedFromDevice.vb

Namespace Devices
   Public NotInheritable Class AlreadyExistingClassDerivedFromDevice
        Inherits Device
   ' ...
   End Class
End Namespace

Это не работает:

MyClassDerivedFromDevice.vb

Namespace Devices
   Public NotInheritable Class MyClassDerivedFromDevice
        Inherits Device
   ' ...
   End Class
End Namespace

Буквально нет разницы с наследующими классами. Только внутренняя работа. Но это не должно влиять на доступность ctor, Intellisense или чего-то еще, верно?

1 Ответ

0 голосов
/ 10 мая 2020

Я пишу это как ответ, потому что это решило мою проблему. Однако я не знаю, в чем причина этого, и не знаю точных шагов, чтобы на самом деле решить проблему «правильным» способом.

Я сделал следующее:

Я переименовал файл MyClassDerivedFromDevice.vb в MyClassDerivedFromDevice_Old.vb, создал новый класс с именем MyClassDerivedFromDevice.vb и сразу после добавления пространства имен и убедившись, что Intellisense и все работает правильно, я просто скопировал код из MyClassDerivedFromDevice_Old.vb (после строки Namespace Devices до End Namespace в MyClassDerivedFromDevice.vb.

Это решило проблему.


Краткая версия:

1) Переименуйте NotWorkingClass.vb в NotWorkingClass_Old.vb

2) Добавьте новый класс с именем NotWorkingClass.vb.

3) Добавьте пространства имен в NotWorkingClass.vb.

4) Проверьте, не все работает соответственно (Intellisense, et c.), и он распознается Visual Studio.

5) Скопируйте весь код, начинающийся после Namespace X прямо перед End Namespace с NotWorkingClass_Old.vb на NotWorkingClass.vb (который теперь должен работать).

...