0

如果我使用其中一种内置类型,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 = "Привет мир"

4

2 回答 2

2

您想要的可以使用隐式转换运算符:

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

虽然我不建议使用此功能来缩短构造线,但这将是一个不好的做法。

ps 对不起 c# 代码片段。

于 2013-01-11T07:43:09.050 回答
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"}

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

于 2013-01-11T07:40:30.957 回答