定义不同类型的变量

时间:2011-02-08 09:24:26

标签: c# .net asp.net vb.net generics

我想知道是否可以定义多个类型的变量/属性。

假设我想要一个TextWebControl的属性WebControl,并且还实现Web.UI.ITextControl(例如,像TextBox或Label)。但我不想强制它是一个TextBox或Label,而只是一个继承自WebControl并实现ITextControl,以便它也适用于.Net-Framework的未来版本中添加的控件。

  • .Net-Framework 4.0

编辑:我已经重新提出问题并添加了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

非常感谢。

3 个答案:

答案 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)