假设您有一个具有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成员的类允许您设置新连接或新连接字符串。
答案 0 :(得分:3)
我认为你只需提供随附的
Public Sub SetLink(ByVal value as String)
_link = new Uri(value)
End Sub
没有更好的东西,AFAIK。
答案 1 :(得分:3)
或者,您当然可以放弃重载并恰当地命名属性:
Public WriteOnly Property UriString() As String
Set(ByVal value As String)
m_Uri = new Uri(value)
End Set
End Property
当然,您不必进行此WriteOnly
,但这似乎是合适的。
答案 2 :(得分:1)
假设您有一个具有Uri属性的类。有没有办法让该属性接受字符串值和Uri?
不,因为这意味着有两个getter只在其返回类型上有所不同,这在.NET中是不允许的。
我将专门使用Uri
方法,并且可能创建一个convenienec方法来设置URI
属性,给定一个字符串。但是,由于从String
到URI
的转换很简单,所以即使这样也没有必要。
答案 3 :(得分:1)
你不能拥有这样的属性,但你可以创建两个属性,它们都操纵相同的底层字段 - 就像Windows窗体中的高度/宽度/大小一样。