vb.net是否可以扩展系统类?

时间:2013-08-18 10:50:39

标签: vb.net class extend

我想向System.IO.Path Class添加一个函数。

问题是路径不可行。

这样做是不可能的:

Imports System.IO

Public Class Path : Inherits System.IO.Path

End Class

2 个答案:

答案 0 :(得分:1)

您可以使用扩展方法。这些似乎是扩展类的功能,但它们之间没有真正的联系。虽然它们确实使编程更方便 http://msdn.microsoft.com/en-us/library/bb384936.aspx

更新:让我们看一个例子。请注意,这些是来自3个文件的片段。

'Noninheritable baseclass
Public NotInheritable Class BaseClass
    Function f()
        Return 42
    End Function
End Class

'Extension
Imports System.Runtime.CompilerServices
Module ExtModule
    <Extension()>
    Public Sub Print(ByVal bc As BaseClass)
        Console.WriteLine(bc.f())
    End Sub
End Module

'Usage
Sub Main()
    Dim bc As BaseClass
    bc = New BaseClass()
    bc.Print() 'Calling the extension method
End Sub

它说42

答案 1 :(得分:0)

问题不在于继承“系统”类,而在于NonInheritable类,这是设计使然并且顾名思义,不可继承。

为什么要继承它呢?您扩展(继承)一个类,以便向其实例添加行为。在Path的情况下,没有实例,Path只是一个“容器”,用于对处理文件系统路径操作的类似方法进行分组。

您应该为您的其他方法或您自己的NotInheritable类创建Module