VB.NET中的命名构造函数习惯用法?

VB.NET中的命名构造函数习惯用法?,vb.net,Vb.net,在VB.NET中是否可以使用命名构造函数习惯用法?我在C/C++中找到了许多示例,但我还不太清楚如何在vb.net中使用它。当涉及到许多具有类似参数类型的构造函数时,这似乎是保持代码可读性的更好方法。我以前从未听说过这个术语,但快速搜索后,它听起来有点像静态工厂模式。其思想是将构造函数设为私有,并使用c公共函数中的共享静态来创建新对象 Public Class Foo Private Sub New() End Sub Public Shared Function CreateNe

在VB.NET中是否可以使用命名构造函数习惯用法?我在C/C++中找到了许多示例,但我还不太清楚如何在vb.net中使用它。当涉及到许多具有类似参数类型的构造函数时,这似乎是保持代码可读性的更好方法。

我以前从未听说过这个术语,但快速搜索后,它听起来有点像静态工厂模式。其思想是将构造函数设为私有,并使用c公共函数中的共享静态来创建新对象

Public Class Foo

Private Sub New()
    
End Sub

Public Shared Function CreateNew(param as Object) as Foo
    Dim obj as New Foo()
    obj.Prop = param
    return obj
End Function

End Class

我以前从未听说过这个词,但经过快速搜索后,它听起来有点像静态工厂模式。其思想是将构造函数设为私有,并使用c公共函数中的共享静态来创建新对象

Public Class Foo

Private Sub New()
    
End Sub

Public Shared Function CreateNew(param as Object) as Foo
    Dim obj as New Foo()
    obj.Prop = param
    return obj
End Function

End Class

您确实可以在VB中创建命名构造函数。该模式在类本身上使用了一个在VB工厂中共享的静态方法,因此可以命名该方法。其他工厂模式涉及使用单独的工厂类来提供静态方法

System.Drawing.Color就是一个简单的例子。该模式作为静态共享属性在下面实现。由于不需要参数,因此属性的Get方法可以正常工作:

Public Shared ReadOnly Property Chartreuse As Color
用法:

Dim favoriteColor as Color = Color.Chartreuse
或者,您可以使用静态工厂方法来完成相同的任务

Public Class TheClass
    Public Sub New()
    End Sub
    Public Sub New(input As String)
        'do something with input
    End Sub
    Public Shared Function MyNamedConstructor() As TheClass
        Return New TheClass
    End Function
    Public Shared Function AnotherNamedConstructor() As TheClass
        Return New TheClass("Another Name")
    End Function
End Class
至于这个模式是否比重载构造函数更好,这确实是一个观点。就我个人而言,我只会让构造器超负荷工作。正如您在上面的示例中所看到的,构造函数无论如何都需要存在

当您只有几种可能的方法来构造类/结构时,我建议使用命名构造函数模式,但类/结构的使用者将经常使用这几种构造函数,并且这些构造函数的输入值不同,如System.Drawing.Color示例中所示


“命名构造函数”中的名称并不表示构造函数本身的名称,而是表示由构造函数生成的对象的名称。如果您的命名构造函数可用于创建两个不适合为其指定相同名称的对象,则不要为构造函数指定该名称。

您确实可以在VB中创建命名构造函数。该模式在类本身上使用了一个在VB工厂中共享的静态方法,因此可以命名该方法。其他工厂模式涉及使用单独的工厂类来提供静态方法

System.Drawing.Color就是一个简单的例子。该模式作为静态共享属性在下面实现。由于不需要参数,因此属性的Get方法可以正常工作:

Public Shared ReadOnly Property Chartreuse As Color
用法:

Dim favoriteColor as Color = Color.Chartreuse
或者,您可以使用静态工厂方法来完成相同的任务

Public Class TheClass
    Public Sub New()
    End Sub
    Public Sub New(input As String)
        'do something with input
    End Sub
    Public Shared Function MyNamedConstructor() As TheClass
        Return New TheClass
    End Function
    Public Shared Function AnotherNamedConstructor() As TheClass
        Return New TheClass("Another Name")
    End Function
End Class
至于这个模式是否比重载构造函数更好,这确实是一个观点。就我个人而言,我只会让构造器超负荷工作。正如您在上面的示例中所看到的,构造函数无论如何都需要存在

当您只有几种可能的方法来构造类/结构时,我建议使用命名构造函数模式,但类/结构的使用者将经常使用这几种构造函数,并且这些构造函数的输入值不同,如System.Drawing.Color示例中所示


“命名构造函数”中的名称并不表示构造函数本身的名称,而是表示由构造函数生成的对象的名称。如果您的命名构造函数可用于创建两个不适合使用相同名称的对象,则不要给构造函数命名。

笨拙的名称,谷歌vb.net工厂模式以获取相关点击。笨拙的名称,谷歌vb.net工厂模式的相关点击。“名称描述”的变化解释了为什么我找不到vb.net的引用。感谢这个简洁的示例,这就是我想要实现的,用类似的参数“清理”我的构造函数。“名称描述”中的更改解释了为什么我找不到vb.net对它的引用。感谢这个简明的例子,这就是我想要实现的,用类似的参数“清理”我的构造函数。