我发现自己需要在HtmlControls和WebControls上执行相同的操作。我坚信DRY并且发现如果我想在两种类型上合并函数,那么只有Control类才能使用。我使用Control时遇到的问题是HtmlControl和WebControl都暴露了Control不具备的某些属性。在当前情况下,Attributes属性是问题。有没有人对如何避免此类实例中的代码重复有任何建议?
答案 0 :(得分:3)
HtmlControl和WebControl都实现了接口IAttributeAccessor(显式)。请改用IAttributeAccessor.SetAttribute。我不是vb.net编码器,所以我将编写代码的任务留给读者。 ;)
答案 1 :(得分:2)
我知道你的意思。从理论上讲,您可以执行以下操作之一:
最终,没有任何公共桥(没有公共基类或接口)。我们在谈论什么样的作业?
答案 2 :(得分:2)
过去我复制了代码来设置HtmlControls和WebControls的属性。但是,这是另一个想法:
Private Sub SetAttribute(ByRef ctrl As Control, ByVal key As String, ByVal value As String)
If TypeOf ctrl Is HtmlControl Then
DirectCast(ctrl, HtmlControl).Attributes(key) = value
ElseIf TypeOf ctrl Is WebControl Then
DirectCast(ctrl, WebControl).Attributes(key) = value
End If
End Sub
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
For Each ctrl In Me.Controls
SetAttribute(ctrl, "class", "classname")
Next
End Sub
答案 3 :(得分:0)
西蒙的回答有效:
Private Sub SetAttribute(ByRef ctrl As IAttributeAccessor, ByVal key As String, ByVal value As String)
ctrl.SetAttribute(key, value)
End Sub
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
For Each ctrl In Me.Controls.OfType(Of IAttributeAccessor)()
SetAttribute(ctrl, "class", "classname")
Next
End Sub