質問

Uriプロパティを持つクラスがあるとしましょう。文字列値とUriの両方を受け入れるようにそのプロパティを取得する方法はありますか?どのように構築しますか?

次のいずれかのようなことができるようにしたいが、どちらもサポートされていない(VBを使用すると、2番目の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 を作成する必要はありませんが、適切なようです。

他のヒント

添付する必要があると思います

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

これ以上良いものはありません、わかりました。

  

Uriプロパティを持つクラスがあるとしましょう。文字列値とUriの両方を受け入れるようにそのプロパティを取得する方法はありますか?

いいえ。これは、戻り値の型のみが異なる2つのゲッターを持つことを意味し、.NETでは許可されないためです。

Uri メソッドを排他的に使用し、文字列を指定して URI プロパティを設定するconvenienecメソッドを作成します。ただし、 String から URI への変換は簡単なので、これも不要な場合があります。

そのようなプロパティを1つ持つことはできませんが、WindowsフォームのHeight / Width / Sizeのように、同じ基になるフィールドを操作する2つのプロパティを作成できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top