命名空间和基类无法识别-为什么



所以我正在做一个别人给我的项目。

在项目中,有一个主Namespace,我们称之为"Program"。在这个名称空间中有几个不同的类。

现在我不得不从命名空间Devices中的一个类派生。已经存在从对象Device派生的另一个类。所以我继续,创建了我的类,将它包含在Devices命名空间中,从Device派生它,并完成了我的工作。

但不久之后,我就不能使用任何基变量、方法等等了。整个intellisense在那个类上都不起作用。更糟糕的是,它似乎没有被纳入大会。

如何让Intellisense、程序集等识别我的类?我做了一个测试课,它只是这样的:

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

而且效果非常好。它被包括在组件中,Intellisense工作,等等

文件夹结构看起来有点像这样:

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

我缺什么了吗?就像有一个隐藏的设置我必须激活?


编辑:声明看起来有点像(但在不同的文件中(:

设备.vb

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

这项工作:

从设备派生的AlreadyExistingClass.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或其他东西的可访问性,对吧?

我写这个作为答案,因为它解决了我的问题。然而,我不知道是什么原因造成的,也不知道以"正确"的方式实际解决问题的确切步骤。

我所做的如下:

我将文件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等(,并由Visual Studio识别。

5( 从NotWorkingClass_Old.vbNotWorkingClass.vb复制所有从Namespace X之后开始到End Namespace之前的代码(现在应该可以工作了(。

最新更新