同じプロパティ、異なるタイプ
-
03-07-2019 - |
質問
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つのプロパティを作成できます。