假设您有一个具有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(字符串值)方法更好的东西,而且我仍然在.Net2.0上(尽管以后的版本有一个很好的功能) ,我想听听它。)

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

有帮助吗?

解决方案

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

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

当然,您不必进行此 WriteOnly ,但这似乎是合适的。

其他提示

我认为你只需提供随附的

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

没有更好的东西,AFAIK。

  

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

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

我将专门使用 Uri 方法,并且可能创建一个convenienec方法来设置 URI 属性,给定一个字符串。但是,由于从 String URI 的转换很简单,所以即使这样也没有必要。

你不能拥有这样的属性,但你可以创建两个属性,它们都操纵相同的底层字段 - 就像Windows窗体中的高度/宽度/大小一样。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top