当前位置: 代码迷 >> VB Dotnet >> Visual Basic.NET调用外部模块中的类解决办法
  详细解决方案

Visual Basic.NET调用外部模块中的类解决办法

热度:51   发布时间:2016-04-25 02:11:12.0
Visual Basic.NET调用外部模块中的类
比如在同一个项目中有两个文件:
文件1:Module1.vb
Module Module1
    Class test
    End Class
End Module


 文件2:Form1.vb
Public Class Form1
    Public cls As test
?End Class


此时在Form1.vb文件中的Public cls As test就会报错:
'cls' cannot expose type 'Module1.test'outside the project through class 'Form1'.
我很疑惑,都是Public的Access Level,为什么不能声明呢。

而将Public clsAs test改成Private clsAs test就不会报错了。
或者将文件2的Public Class Form1写到Module中(如下),也可以解决这个错误,虽然这样的话就不是我要的了。
 文件2:Form1.vb(修改)
Module Module2
    ?Public Class Form1
        ?Public cls As test
    ?End Class
End Module

------解决思路----------------------
引用:
Quote: 引用:

您不应该模块内嵌套test类,正确的做法是类内嵌套类。

模块的性质与类不同的。

模块内声明的共有元素只能在其他类内可以访问,但是实例化的变量不能再次向外公开类型Public,
只能做类内访问。
这是Module1 模块的性质有关。想避免这种问题,独立创建Class类或,类内嵌套起来。



Module Module2
    ?Public Class Form1
        ?Public cls As test
    ?End Class
End Module


出于具体的需求,如果我就是想在类模块中去调用一个的标准模块中的类,而且将其声明为public,应该怎么办呢?
比如我的提问里面的:为类Form1中添加一个public的属性,而这个属性的类型为Module1中的test类。


我已经上面提到,模块内声明的共有元素只能在其他类内可以访问,但是实例化的变量不能再次向外公开类型Public,
 只能做类内访问。” 

不管Form窗体类内或类模块内都是一样的。

至于解决方案已经又上面提到,想避免这种问题,独立创建Class类或,类内嵌套起来。

最后我再次说明,Module模块与Class类模块不同的是Module 模块不能被实例化,而且是Shared共享类型的,模块内的元素默认值是Public。这是因为,只有这样其他类内可以访问模块内的共享元素。



  相关解决方案