所以我正在做一个别人给我的项目。
在项目中,有一个主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.vb
到NotWorkingClass.vb
复制所有从Namespace X
之后开始到End Namespace
之前的代码(现在应该可以工作了(。