【问题标题】:Define a variable of different types定义不同类型的变量
【发布时间】:2011-02-08 09:24:25
【问题描述】:

我想知道是否可以定义一种以上类型的变量/属性。

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

  • .Net-Framework 4.0

编辑:我重新标记了问题并添加了 VB.Net,因为它是我的默认语言。通常,我理解 C# 也没有问题,但我必须承认,如果没有经验,很难将通用的东西翻译成 VB.Net,而且在 C# 中的文档也比在 VB 中更好。所以我会欣赏(并接受)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

非常感谢。

【问题讨论】:

  • 属性不能是通用的...

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


【解决方案1】:

仅在泛型内部,即

void SomeMethod<T>(T whatever) where T : WebControl, ITextControl {...}

否则,您将不得不在它们之间进行选择,或者有 2 个变量。

【讨论】:

  • 能否提供一些例子以便更好地理解
  • 谢谢。我已经编辑了我的问题。不幸的是,在泛型上,我无法将其翻译成我的默认语言 VB.Net,所以你(或其他人)能否在 VB 中提供一个示例。
  • @Tim me not两个变量。
  • 该代码的 Vb.Net 版本是 Sub SomeMethod(Of T As {WebControl, ITextControl})() ... End Sub
【解决方案2】:

我会说你要么定义某个接口的变量,要么使用你认为需要支持的所有类派生的最低可能的基类。

【讨论】:

  • 所以我必须使用 WebControl 作为基类并希望给定的 WebControl 实现 ITextControl?这似乎不太干净,我希望为此制作泛型。还是谢谢你。
【解决方案3】:

这是具有多个约束的泛型类的 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-12
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多