.net 如何使用属性拦截类属性设置器
我想计算某些特定属性设置的次数。 我可以这样做:.net 如何使用属性拦截类属性设置器,.net,vb.net,.net,Vb.net,我想计算某些特定属性设置的次数。 我可以这样做: Class Test Private changeCounter As New Dictionary(Of String, Integer) Private _myProp1 As String Public Property MyProp1() As String Get Return _myProp1 End Get Set(ByVal valu
Class Test
Private changeCounter As New Dictionary(Of String, Integer)
Private _myProp1 As String
Public Property MyProp1() As String
Get
Return _myProp1
End Get
Set(ByVal value As String)
_myProp1 = value
If Not changeCounter.ContainsKey("MyProp1") Then
changeCounter.Add("MyProp1", 0)
End If
changeCounter("MyProp1") += 1
End Set
End Property
Private _myProp2 As String
Public Property MyProp2() As String
Get
Return _myProp2
End Get
Set(ByVal value As String)
_myProp2 = value
If Not changeCounter.ContainsKey("MyProp2") Then
changeCounter.Add("MyProp2", 0)
End If
changeCounter("MyProp2") += 1
End Set
End Property
Public Sub Print()
For Each pair In changeCounter
Console.WriteLine("{0} : {1}", pair.Key, pair.Value)
Next
End Sub
End Class
用法:
Dim t As New Test
t.MyProp1 = "value 1"
t.MyProp1 = "value 2"
t.MyProp2 = "value 3"
t.Print()
'Output
MyProp1 : 2
MyProp2 : 1
我想知道,为了使代码更干净,是否可以使用一些自定义属性实现同样的功能。比如:
Class Test
Private changeCounter As New Dictionary(Of String, Integer)
<SomeCustomAttribute("MyProp1", ...)>
Public Property MyProp1() As String
<SomeCustomAttribute("MyProp2", ...)>
Public Property MyProp2() As String
Public Sub Print()
For Each pair In changeCounter
Console.WriteLine("{0} : {1}", pair.Key, pair.Value)
Next
End Sub
End Class
类测试
作为新字典的专用changeCounter(字符串、整数)
公共属性MyProp1()作为字符串
公共属性MyProp2()作为字符串
公共子打印()
对于changeCounter中的每对
Console.WriteLine(“{0}:{1}”,pair.Key,pair.Value)
下一个
端接头
末级
为什么不使用内部私有函数呢
Class Test
Private changeCounter As New Dictionary(Of String, Integer)
Private _myProp1 As String
Public Property MyProp1() As String
Get
Return _myProp1
End Get
Set(ByVal value As String)
_myProp1 = value
CountChange("MyProp1")
End Set
End Property
Private _myProp2 As String
Public Property MyProp2() As String
Get
Return _myProp2
End Get
Set(ByVal value As String)
_myProp2 = value
CountChange("MyProp2")
End Set
End Property
Public Sub Print()
For Each pair In changeCounter
Console.WriteLine("{0} : {1}", pair.Key, pair.Value)
Next
End Sub
Private Sub CountChange(ByVal PropName As String)
If Not changeCounter.ContainsKey(PropName) Then
changeCounter.Add(PropName, 0)
End If
changeCounter("MyProp1") += 1
End Sub
End Class您在没有属性的情况下进行操作的方式似乎很好,为什么要使用属性?@Ric我有很多属性,我不想为每个属性重复几乎相同的代码。