这是问题,我想定义一个接受decimal
个数字的属性,并对该值进行一些处理并返回string
,如下所示:
Public Property Amount() As String
Get
Return Utility.PaddingRight(Me.msAmount.ToString(), 10)
End Get
Set(ByVal vsValue As Decimal)
Me.msAmount = vsValue
End Set
End Property
但是编译器警告“Set参数必须具有相同类型的包含属性。”
它看起来不应该抛出错误,因为它看似合法。
答案 0 :(得分:3)
你不能这样做的原因是因为你放入一个属性的内容应该与你从中获得的内容完全相同。如果类型改变了,那么这种情况永远不会成立。 Microsoft's spec说“属性就像智能领域”。想象一下,如果一个字段(类变量)在读写之间发生了变化。
您的目标完全有效,但这不是属性的预期用途。 (“预期目标”是指微软的预期目标。)如果传入无效或空字符串,您的设计也会为潜在问题打开大门。属性的设计目标之一是它们重量轻且不应该扔错误。他们 可以 但 不应 。建议的解决方案是为您的财产使用TryParse
模式。
修改强>
抱歉,我的大脑偏离了轨道,你的目标是改变吸气剂,而不是改变吸气剂。您正在寻找的模式只是一个只读属性(如@msarchet指出的那样),它特定于您的getter。例如,AmountForPrint
或其他东西。您还应该为实际值包含读/写。
Public ReadOnly Property AmountForPrint
Get
Return Me.Amount.ToString()
End Get
End Property
Public Property Amount As Integer
Get
End Get
Set(value As Integer)
End Set
End Property
答案 1 :(得分:1)
我认为您需要使用方法而不是属性来执行此操作
Public Function Amount(ByVal value As Decimal) As String
End Function
答案 2 :(得分:0)
这只是在黑暗中拍摄的。 。 。
Set(ByVal vsValue As String)
Me.msAmount = System.Convert.ToDecimal(vsValue)
End Set
答案 3 :(得分:0)
你这样做会好得多吗
Public Read Only Property Amount() As String
Get
Return Utility.PaddingRight(Me.msAmount.ToString(), 10)
End Get
End Property
Public Sub SetAmount(ByVal value As Decimal)
Me.msAmount = value
End Sub