Vb.net 使扩展方法位于文件范围的本地

Vb.net 使扩展方法位于文件范围的本地,vb.net,scope,extension-methods,Vb.net,Scope,Extension Methods,目前,我使用以下方法将我的扩展方法本地化到 将文件隐藏在唯一命名的命名空间中。它并没有真正隐藏它 但只要没有其他人导入名称空间,它就很酷。然而 图案很难看。下面的代码只是演示扩展方法 戏法不要试图对我在用ISubject做什么得出任何结论 MyFancyComponent.cs - 扩展方法的主要目的是重用。如果它们只能在单个文件中使用,您可以简单地使用普通方法。这将使代码更具可读性。我喜欢为这些特定操作使用流畅的接口,因为它从左到右逻辑链接。这是一个双向绑定管道,保持它的一致性有助于可读性。

目前,我使用以下方法将我的扩展方法本地化到 将文件隐藏在唯一命名的命名空间中。它并没有真正隐藏它 但只要没有其他人导入名称空间,它就很酷。然而 图案很难看。下面的代码只是演示扩展方法 戏法不要试图对我在用ISubject做什么得出任何结论

MyFancyComponent.cs
-


扩展方法的主要目的是重用。如果它们只能在单个文件中使用,您可以简单地使用普通方法。这将使代码更具可读性。我喜欢为这些特定操作使用流畅的接口,因为它从左到右逻辑链接。这是一个双向绑定管道,保持它的一致性有助于可读性。对于其他用例,这可能不是真的。无论如何,我认为扩展方法的主要目的是重用。正常函数可以重用,因此该点无效。扩展方法允许一个流畅的接口,就像它们是实例方法一样。在某些情况下这是有用的,而在其他情况下则不是。旁注:我不知道迭代器是有用的。很高兴知道不幸我在VS2010上。但是,如果ISubject仅用于此文件中,并且是Proteced,则扩展名也适用于此文件。升级,让您的生活舒适!
Import MyFancyComponentMixins
Namespace MyFancyComponentMixins
    Module X
        <Extension>
        Public Function Format(s As ISubject(Of Double)) as ISubject(Of String)
            Return s.LocalizeLengthUnits().
                Select(
                parser:=Function(x) Double.Parse(x),
                formatter:=Function(x) x.ToString("0.00"))

        End Function
    End Module
End Namespace

class MyFancyComponent
    Inherits ReactiveUserControl(of MyFancyViewModel)


    Public Overrides Iterator Function  MakeReactiveBindings() as IEnumerable(of IDisposable)
        Yield Me.ViewModel.
            PropertySubject(Function(x) x.Height).
            Format().
            BindToControl(Me.HeightTextBox)
        Yield Me.ViewModel.
            PropertySubject(Function(x) x.Width).
            Format().
            BindToControl(Me.WidthTextBox)
    End Function



end class