我是vb.net的新手,非常沮丧。
像所有优秀的程序员一样,我想根据功能将代码拆分为单独的文件。我的一些代码通过Forms与用户交互,一些代码在幕后与实验室设备交互(没有直接的用户交互)。有时用户会改变会影响实验室设备的东西,有时用户需要注意的实验室设备会发生某些事情。当我使用VS创建文件时,我必须选择一个模块或表单。 VS然后使用
创建一个空文件Public Class Foo
结束班
或
模块Foo
结束模块
如果我有一堆文件,每个模块,如果我将模块中的例程定义为朋友,那么我可以从其他模块中调用它们,所以:
模块Foo
Friend Sub DoSomeWork()
End Sub
结束模块
费用代码可以调用Foo中的例程 -
模块费用
Friend Sub Stuff()
DoSomeWork()
End SUb
结束模块
当我创建一个Form时,VS会创建一个Class。我发现我可以从一个类中调用模块中定义的子程序但是当我尝试从一个模块调用一个类时,我得到一个错误,我试图调用的例程没有被声明。我也不能从一个班级打电话到另一个班级。声明似乎只适用于程序之外的库例程。
我已经浏览了几个在线解释和教程,但坦率地说,我不理解这些,我也不关心“继承基类”以及所有其他gobbledygook这样的“解释”包含。我想集中精力构建我的应用程序。
我的主表单名称为“Main”
我尝试将所有模块代码放入Main Class,方法是将“Module Foo”重命名为“Public Partial Class Main” - 糟糕的想法 - 创建一个不可能发现的重复错误。我尝试创建空代码文件,将它们定义为Public Partial Class Main并将Module代码放入其中, - 这在Class Main中的代码中可以调用“Module”代码(现在在Main中),反之亦然但是,其他表单(当然我有多个表单)是由VS创建的,它们有自己的类,一旦“模块”代码从模块中移出到主类,其他表单(类)就不能再调用代码了
我只想要一些配方(最佳实践)来定义模块和类,以便共享代码和数据。
下面的答案
要在另一个类中调用子例程,您只需将类名放在子例程名称前面。
所以不是
DoSomeWork()
但
Foo.DoSOmeWork()
对于所有有经验的程序员而言,这可能是显而易见的,但对我来说却不是。您不必将类/模块名称添加到模块到模块调用或类到模块调用,而只需要添加到类中的调用。就个人而言,为了保持一致性,我认为事情应该是相同的,但它可能会违反一些OO规则。无论如何,谢谢大家。
答案 0 :(得分:0)
NomD,
像所有优秀的程序员一样
你确实应该关心
关于“继承基类”和所有其他gobbledygook这样的“解释”
这将使您成为更好的程序员,并花时间了解为什么正确的代码结构很重要也将开始为您带来更好的结果。
答案 1 :(得分:0)
通常,如果您有一个需要从多个表单或表单和模块调用的函数,请将其放在主模块中。如果您有特殊情况并且需要从另一个表单或模块中调用表单中的函数或子表单,则可以将其声明为公开:
Public Class Form1
public sub test(i as integer)
...
end sub
end class
然后你可以通过引用class.subname来调用它:
call form1.test(7)
答案 2 :(得分:0)
我不确定为什么两个评论员似乎与VB.Net有问题。无论语言如何,问题都是一样的,因为两者都是C#而VB是建立在.Net上的。代码可以在C#中写得很差,就像VB一样。请把语言战留在家里。 NormD,你的问题的答案应该是引导你到更好地理解问题所需的资源。这篇关于范围的文章可能会有所帮助 - class scope。您获得所看到的行为的原因是由于您正在使用的内容。程序开始时会创建模块(类似于C#中的静态类),因此无需创建它们。所以你可以在模块上引用一个方法,就像这样 - module.method。另一方面,需要创建类,以便引用。因此,要使用员工(或表单类),您必须创建该类的变量。因此,您将使用dim myemp作为New Employee(),然后从模块中调用myemp.method()。这是一个相当简单的描述,因此请阅读范围文章和其他MSDN文章以获取更多信息。我相信其他海报可以发布额外的链接和良好的信息。希望这有点帮助。
韦德
答案 3 :(得分:-1)
您似乎不了解面向对象编程(OOP)的基础知识。
如果您不想学习如何以面向对象的方式设计应用程序,那么只需在应用程序中创建模块,您就可以毫无问题地将函数从一个调用到另一个函数。但这会导致代码无法轻松维护和扩展。
另一种选择是通过挑选一本关于它的书,或者关于这个主题的课程或教程来学习OOP。这是一项重大投资,但它会产生更强大的代码,当您的应用程序增长时,这些代码可以更好地扩展。