【问题标题】:Best alternative approach to define a Partial Module in Vb.Net在 Vb.Net 中定义部分模块的最佳替代方法
【发布时间】:2016-02-09 07:44:01
【问题描述】:

场景


假设您,程序员,正在开发一个带有模块文件的 API,比如说 BitmapExtensions.vb,其中充满了扩展方法,例如,每个扩展方法都有 20 个重载,这会导致增加代码行数的源代码,

那么,为了在我们的编程环境中保持高效,请确保您希望将每个方法分成不同的文件(一种具有相同模块名称的部分模块,就像我们对部分类所做的那样),但是,部分模块不能已定义且 Class 不支持 Vb.Net 中的扩展方法,

这完全破坏了用户体验和程序员的工作效率,因为所有这些都是缺点,当搜索特定的重载或添加更多时,总是需要使用 Visual Studio 代码编辑器上的垂直滚动条来滚动数千行,或者多次使用搜索框查找方法名称,因为所有方法及其所有重载都在同一个文件中混乱......而且,它非常难看。

问题


只是......如果可能的话,程序员在这些情况下可以做些什么来组织源代码架构?

我真的不想保留包含 3.000 行代码的模块文件,我希望 1 个文件中的 500 行代码(这意味着 1 个方法及其所有重载)保留相同的名称(空格),并且以此类推,将其他成员放入单独的文件中。

这可能以某种方式进行吗?

PS:当然,将扩展方法转换为通用方法以获得定义部分类的好处不是一种选择。

【问题讨论】:

  • 我不明白。如果我在Ext1 中放置一个扩展方法,在Ext2 中放置一个重载,它们仍然会在智能感知中显示为重载。为什么你关心模块名称是什么?唯一似乎有区别的地方是在对象浏览器中

标签: .net vb.net organization partial-classes convention


【解决方案1】:

2016 年 8 月 3 日编辑

部分模块和接口自 VB .Net 14.0 起可用。

原答案

好吧,知道使用模块进行类型提升 (https://msdn.microsoft.com/en-us/library/xz7s1h1x.aspx) 的事实,您创建一个命名空间,然后将其拆分为模块文件。如果命名空间中的所有方法都是唯一的,则只需导入命名空间,它们就可以访问,而无需命名模块...

我想这就是为什么模块不能是部分的,因为如果方法是唯一的,模块名称可以省略。

文件 test1.vb

Namespace Test
   Module Test1
     Function Hello() as String
       ...
     End Function
   End Module
End Namespace

文件 test2.vb

Namespace Test
   Module Test2
     Function Hi() as String
       ...
     End Function
   End Module
End Namespace

其他文件

Imports Test
Public Function MyFunc() as String
  Return Test.Hi()
End Function

【讨论】:

    【解决方案2】:

    据我了解,VS 2015 - MSDN link 支持 VB.Net 部分模块。不确定这是否适合您。

    也就是说,我有另一个场景来说明部分模块如何有用/必要。考虑使用代码生成来创建由单个大模块组成的文件的情况。该模块包含公共和私有方法。开发人员可能希望/需要创建使用私有方法的新方法(在生成的代码之外)。如果生成的文件包含一个部分模块,开发人员可以简单地创建另一个源文件并添加到该部分模块。

    如果不能选择 Partial Module(即 VS2015 之前的版本),我会对这个问题的解决方案感兴趣。谢谢。

    【讨论】:

    • 好吧,我不确定您的方案是否合适,好像您需要在创建的文件之外使用私有方法,您可能会遇到概念问题。但是,如果没有部分模块,您仍然可以将方法声明为友元,这样您的概念模型就更有意义了。
    猜你喜欢
    • 2011-03-22
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多