创建一个允许在一行中声明/初始化的构造函数方法

时间:2013-01-11 07:34:58

标签: .net vb.net

如果我在VB.NET中使用其中一种内置类型,我可以在一条短线中声明并初始化...

Dim foo As String = "Привет мир"

我创建了一个班级" bar"使用以下重载的构造函数方法...

Public Class bar

    Private fText As String

    Public Sub New()
        fText = ""
    End Sub

    Public Sub New(ByVal value As String)
        fText = value
    End Sub

    Public ReadOnly Property Text() As String
        Get
            Return fText
        End Get
    End Property

End Class

如何编写构造函数,以便我可以执行更短版本的声明/初始化而不是执行以下操作?

目前bar我执行此操作:

Dim myBar As bar
myBar = New bar("Привет мир")

如何设置bar以便可以使用这个更短的版本?:Dim myBar As bar = "Привет мир"

2 个答案:

答案 0 :(得分:2)

如果您使用公共设置器创建该属性:

Public Class bar
    Public Property Text() As String

    Sub New()
        ' set a default value for the property
        Text = ""
    End Sub
End Class

你可以使用类初始化语法:

Dim bar = New bar With {.Text = "Привет мир"}

使用此语法,您可以在实例化对象时设置任何公共属性。您不需要特定的构造函数:

Dim bar = New bar With {.Text = "Привет мир", .Foo = "foo", .Bar = "bar"}

如果属性应该只读并仅通过构造函数初始化,那么您当前的代码就可以了。

答案 1 :(得分:2)

您想要的是隐式转换运算符:

class bar
{
 //...
    public static implicit operator bar(string value)
    {
        return new bar(value);
    }
}

虽然我不建议使用此功能来缩短施工线,但这是一种不好的做法。

抱歉,对于c#代码段。