相同的属性,不同的类型
时间: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",但这似乎是适当的。