我想知道是否可以定义多个类型的变量/属性。
假设我想要一个TextWebControl
的属性WebControl
,并且还实现Web.UI.ITextControl
(例如,像TextBox或Label)。但我不想强制它是一个TextBox或Label,而只是一个继承自WebControl并实现ITextControl,以便它也适用于.Net-Framework的未来版本中添加的控件。
编辑:我已经重新提出问题并添加了VB.Net,因为它是我的默认语言。通常,对我来说理解C#也没问题,但我必须承认,如果没有经验就很难将通用的东西翻译成VB.Net,而且在C#中也比在VB中更好。所以我很感激(和aceept)一个VB.net泛型ITextControl / WebControl的工作示例。
从Marc的回答中我明白我需要一个通用类。但是我如何在SomeClass
中实例化它呢?这不会编译:
Class SomeClass
Public Property info As InfoControl(Of WebControl, ITextControl)
End Class
Public Class InfoControl(Of T As {WebControl, ITextControl})
End Class
非常感谢。
答案 0 :(得分:4)
只有内部泛型,即
void SomeMethod<T>(T whatever) where T : WebControl, ITextControl {...}
否则,您将不得不在它们之间进行选择,或者有2个变量。
答案 1 :(得分:1)
我想说你要么定义某个接口的变量,要么使用你认为需要支持的所有类派生的最低基类。
答案 2 :(得分:1)
这是具有多个约束的泛型类的VB版本:
Public Class SomeClass(Of T As {WebControl, ITextControl})
Private _item As T
Public Property Item() As T
Get
Return Me._item
End Get
Set(ByVal value As T)
Me.ParseValue(value)
Me._item = value
End Set
End Property
Public Sub ParseValue(ByVal value As T)
''//do something with value here if you want
End Sub
Public Sub New(ByVal item As T)
Me._item = item
End Sub
End Class
要实例化它,你会这样做:
Dim L As New Label()
Dim S1 As New SomeClass(Of Label)(L)