3

假设您有一个具有 Uri 属性的类。有没有办法让该属性同时接受字符串值和 Uri?你会如何建造它?

我希望能够执行以下操作之一,但都不支持(使用 VB,因为它允许您在 Set 声明中为第二个指定类型):

Class MyClass

    Private _link As Uri

   'Option 1: overloaded property
    Public Property Link1 As Uri
        Get
            return _link
        End Get
        Set(ByVal value As Uri)
           _link = value
        End Set
    End Property

    Public Property link1 As String
        Get
            return _link.ToString()
        End Get
        Set(Byval value As String)
           _link = new Uri(value)
        End Set
   End Property

   ' Option 2: Overloaded setter
   Public Property link2 As Uri
      Get
          return _link
      End Get
      Set(Byval value As Uri)
          _link = value
      End Set
      Set(Byval value As String)
          _link = new Uri(value)
      End Set
End Class

鉴于这些可能不会很快得到支持,您还会如何处理呢?我正在寻找比提供附加.SetLink(string value)方法更好的东西,而且我仍在使用 .Net2.0(尽管如果以后的版本对此有很好的功能,我想听听)。

我可以想到您可能希望提供这种重载的其他场景:例如,具有 SqlConnection 成员的类允许您设置新连接或新连接字符串。

4

4 回答 4

3

我想你只需要提供一个陪伴

Public Sub SetLink(ByVal value as String)
    _link = new Uri(value)
End Sub

AFAIK,没有比这更好的了。

于 2008-10-02T15:11:32.673 回答
3

或者,您当然可以放弃重载并适当地命名属性:

Public WriteOnly Property UriString() As String
    Set(ByVal value As String)
        m_Uri = new Uri(value)
    End Set
End Property

当然你不必这样做,WriteOnly但它看起来很合适。

于 2008-10-02T15:14:57.843 回答
1

假设您有一个具有 Uri 属性的类。有没有办法让该属性同时接受字符串值和 Uri?

不,因为这意味着有两个仅在返回类型上有所不同的 getter,而这在 .NET 中是不允许的。

在给定字符串的情况下,我将Uri专门使用该方法,并可能创建一个方便的方法来设置属性。URI但是,由于从Stringto的转换URI很简单,即使这样也可能是不必要的。

于 2008-10-02T15:12:25.790 回答
1

您不能拥有这样的一个属性,但您可以创建两个都操作相同基础字段的属性 - 就像 Windows 窗体中的高度/宽度/大小一样。

于 2008-10-02T15:13:18.080 回答