相同的属性,不同的类型
时间:2020-03-06 15:01:56 来源:igfitidea点击:
假设我们有一个带有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 Sub SetLink(ByVal value as String)
_link = new Uri(value)
End Sub
AFAIK,没有比这更好的了。
Let's say you have a class with a Uri property. Is there any way to get that property to accept both a string value and a Uri?
不可以,因为这意味着要有两个仅在返回类型上有所不同的getter,而.NET不允许这样做。
我将专门使用Uri方法,也许会创建一个convenienec方法来设置URI属性(给定一个字符串)。但是,由于从String到URI的转换非常简单,因此甚至没有必要。
我们不能拥有一个这样的属性,但是我们可以创建两个属性,它们都操纵相同的基础字段,就像Windows窗体中的Height / Width / Size。
另外,我们当然可以放弃重载,而只是适当地命名属性:
Public WriteOnly Property UriString() As String
Set(ByVal value As String)
m_Uri = new Uri(value)
End Set
End Property
当然,我们不必制作此" WriteOnly",但这似乎是适当的。

