【问题标题】:VB.NET - Extension functions within a class?VB.NET - 类中的扩展函数?
【发布时间】:2013-07-19 22:46:28
【问题描述】:

我正在尝试创建一个具有将二进制整数转换为 denary 的函数的类库,反之亦然,这样我就可以将其导入另一个项目而无需重写该函数。它工作正常,这是课程的一部分:

Public Class BinaryDenary
    Public Shared Function ToBinary(ByVal DenaryNumber As Integer) As Integer
        Dim Binary As String = ""
        While DenaryNumber > 0
            If DenaryNumber Mod 2 = 1 Then
                Binary = 1 & Binary
            Else
                Binary = 0 & Binary
            End If
            DenaryNumber \= 2
        End While
        Return CInt(Binary)
    End Function
End Class

我已经在项目中对其进行了测试,效果很好。

ToBinary(3) 'Returns 11
ToDenary(110) 'Returns 6

但是 - 主要是出于美观的原因 - 我希望能够像扩展方法一样使用它,这样我就可以获取一个变量并执行此操作:

NormalInt.ToBinary(3)

但我不能在类中编写扩展方法。有没有办法做到这一点?这不是很重要,但我喜欢尽可能使用扩展方法。

【问题讨论】:

    标签: vb.net function extension-methods


    【解决方案1】:

    用 VB .NET 编写的扩展方法,必须在 Module 中并用 Extension 属性标记,如下所示:

    Public Module BinaryDenary
    
        <Extension()>
        Function ToBinary(ByVal DenaryNumber As Integer) As Integer
            Dim Binary As String = ""
            While DenaryNumber > 0
                If DenaryNumber Mod 2 = 1 Then
                    Binary = 1 & Binary
                Else
                    Binary = 0 & Binary
                End If
                DenaryNumber \= 2
            End While
            Return CInt(Binary)
        End Function
    
    End Module
    

    如果模块不在同一个命名空间中,则应导入使用它的命名空间。

    【讨论】:

    • 什么是命名空间?模块?我是否像导入类一样导入它?
    • 命名空间这是组织代码的另一种方式,请在此处阅读 Understanding Assembly and Namespace 模块是程序集中的逻辑集合代码,请在此处阅读 What is a module in .NET?
    • 所以,澄清一下:我应该在单独的命名空间中的新模块中编写函数吗?这应该在单独的 .vb 文件中吗?
    • 应该或不应该,取决于您应用于项目的良好实践,您可以研究和探索有关项目架构的更多详细信息
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多