是否有可能在类中获得命名空间的功能?

Posted

技术标签:

【中文标题】是否有可能在类中获得命名空间的功能?【英文标题】:Is it possible get the functionality of namespaces inside a class? 【发布时间】:2011-02-14 14:35:46 【问题描述】:

我有以下代码:

Public Class Form1
Private Function Step1_Execute() As Boolean
    Return Step1_Verify()
End Function

Private Function Step1_Verify() As Boolean
    Return True
End Function

Private Function Step2_Execute() As Boolean
    Return Step2_Verify()
End Function

Private Function Step2_Verify() As Boolean
    Return True
End Function
End Class

我想做的是能够将代码分开,类似于以下(显然行不通):

Public Class Form1

Namespace Step1
    Private Function Step1_Execute() As Boolean
        Return Step1_Verify()
    End Function

    Private Function Step1_Verify() As Boolean
        Return True
    End Function
End Namespace

Namespace Step2
    Private Function Step2_Execute() As Boolean
        Return Step2_Verify()
    End Function

    Private Function Step2_Verify() As Boolean
        Return True
    End Function
End Namespace

End Class

我想要一个类内部命名空间的功能,因为它可以让我调用 Step2.Execute() 而不必将 Step2_ 放在一大堆函数的前面。我不想为 step1、step2 等创建单独的类/模块。

有没有一种方法可以在类内部完成命名空间功能?

【问题讨论】:

【参考方案1】:

只使用module(在很大程度上相当于 C# 中的静态类)怎么样?这似乎可以很好地完成工作并为您提供所需的参考样式。

Module Step1
    Private Function Execute() As Boolean
        Return Verify()
    End Function

    Private Function Verify() As Boolean
        Return True
    End Function
End Module

Module Step2
    Private Function Execute() As Boolean
        Return Step2_Verify()
    End Function

    Private Function Verify() As Boolean
        Return True
    End Function
End Module

如果您愿意,我相信您甚至可以将 VB.NET Modules 嵌套在其他类中。

编辑:

刚刚意识到所有模块都具有相同的契约(一组方法签名),因此在这里实现一个接口并创建类的实例实际上是有意义的。代码可能多一点,但如果你想抽象一些东西,这可能是值得的。

【讨论】:

【参考方案2】:

没有。

命名空间并不是真正存在的。命名空间只是类名的部分。因此,如果您有 System.Text.StringBuilder 类,“使用 System.Text”部分是对编译器的提示,例如“如果找不到类型,请查找所有以 'System 开头的未知标识符的类型.Text' 在未知部分前面。

【讨论】:

【参考方案3】:

显然,您需要将其分成 3 个类。将执行代码的一种。而不是 2 继承了相同的接口,其中包含执行和验证方法。

然后,执行类将包含此接口的集合,您只需按照要执行的顺序添加它们即可。

【讨论】:

以上是关于是否有可能在类中获得命名空间的功能?的主要内容,如果未能解决你的问题,请参考以下文章

命名空间在类中找到,但在 aspx 中没有

类命名空间与对象实例的命名空间

类命名空间与对象实例的命名空间 and 面向对象的组合用法

python基础 13 类命名空间于对象实例的命名空间,组合方法

类命名空间与对象实例的命名空间和下面向对象的组合用法

面向对象进阶:命名空间和组合