我已经做了很多方法重载,但现在我有一个实例,我想重载一个属性。 Visual Studio中的IDE似乎允许它,因为我实际上可以设置两个重载,但是我得到一个错误,说它无效,因为它们的类型不同。我想我的语法中缺少一些东西?
我希望能够使用两个(或更多)不同的自定义类作为我的属性的类型。
Public Overloads Property myFlexibleProperty() As myCustomClass1
Get
Return _myFlexibleProperty1
End Get
Set(ByVal value As myCustomClass1)
_myFlexibleProperty1 = value
End Set
End Property
Public Overloads Property myFlexibleProperty() As myCustomClass2
Get
Return _myFlexibleProperty2
End Get
Set(ByVal value As myCustomClass2)
_myFlexibleProperty2 = value
End Set
End Property
到目前为止,我找到的所有帮助都与重载方法有关。尽管IDE让我这么做,我开始认为这是不可能的?
答案 0 :(得分:18)
要重载某些东西 - 方法或属性 - 您需要它接受一组不同的参数。由于VB.NET中的属性可以接受参数,我猜你可以重载它们;但他们必须是不同的。
所以你可以这样做:
Public Overloads Readonly Property Average() As Double
Public Overloads Readonly Property Average(ByVal startIndex As Integer) As Double
但不是这样:
Public Overloads Readonly Property Average() As Double
Public Overloads Readonly Property Average() As Decimal
答案 1 :(得分:2)
这不应该是可能的。您正在有效地尝试创建一个可以返回两种不同类型的属性。系统无法确定您要调用的内容。
您必须为每个人提供唯一的属性名称。
答案 2 :(得分:1)
您的签名是相同的(只有返回类型不同)。编译器不会知道您正在调用哪种方法。那是你的问题。更改签名。
答案 3 :(得分:1)
您是否尝试过使用基于接口的类?然后,您可以基于相同的公共接口和与接口类型关联的属性而不是特定的类本身具有不同的类。
答案 4 :(得分:1)
有一种方法
Public Enum myType
inInteger = 0
inDouble = 1
inString = 2
End Enum
Public Class clsTest
Dim _Value1 As Integer
Dim _Value2 As Double
Dim _Value3 As String
Public Property MyValue(ByVal Typ As myType) As Object
Get
Select Case Typ
Case myType.inDouble
Return _Value2
Case myType.inInteger
Return _Value1
Case Else
Return _Value3
End Select
End Get
Set(ByVal value As Object)
Select Case Typ
Case myType.inDouble
_Value2 = value
Case myType.inInteger
_Value1 = value
Case Else
_Value3 = value
End Select
End Set
End Property
End Class
答案 5 :(得分:0)
无法重载属性。话虽这么说,您可以通过创建隐式转换或重载=
运算符来完成您想要的任务。
答案 6 :(得分:0)
可以让属性在某个特殊类上运行,这类特殊类支持扩展转换运算符与真实类型的转换。在某些情况下,这可以很好地工作并提供有用的扩展。最大的限制:
但是,在某些情况下,这可能是一个有用的抽象(特别是如果基类型是一个结构)。