.net - 相同的属性,不同的类型

标签 .net .net-2.0 properties overloading

假设您有一个具有 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 成员的类允许您设置新连接或新连接字符串。

最佳答案

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

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

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

关于.net - 相同的属性,不同的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/162879/

相关文章:

android-studio - Android Studio 不显示属性

javascript - angular 2+ 属性不是 @Input() 中指定的已知属性

c# - Mutex/Monitor 不适用于 C# 线程同步

c# - TimeZone.IsAmbigouslyTime,为什么它对于 GMT 模糊时间失败?

c# - 实体不使用代码优先方法更新

asp.net - 如何在 aspx 页面中将 2 个资源字符串连接在一起

encryption - Compact Framework - 获取存储卡序列号

.net - 是否可以在多个程序之间共享 SQL Server 事务?

c# - 在列表上查找联合、减去、交集的函数

java - 复杂的属性绑定(bind)