限制对结构的接口只有在vb.net
我有一个接口IDigitalState定义为限制对结构的接口只有在vb.net
Public Interface IDigitalState ReadOnly Property Code As Integer
ReadOnly Property Name As String
End Interface
,并实现该接口
Public Structure DigitalState Implements IDigitalState
Private ReadOnly mCode As Integer
Private ReadOnly mName As String
Public ReadOnly Property Code As Integer Implements IDigitalState.Code
Get
Return mCode
End Get
End Property
Public ReadOnly Property Name As String Implements IDigitalState.Name
Get
Return mName
End Get
End Property
Public Sub New(ByVal code As Integer, name As String)
mCode = code
mName = name
End Sub
End Structure
我想做一个结构是声明一个变量作为IDigitalState的可空类型。我明白为什么我不能这样做,因为接口可能由一个不允许为空的类来实现。有没有一种方法来定义接口,以便它只能通过结构来实现。我怀疑这是可能的,但认为这是值得研究的。
回答:
不,没有办法。
但是,您可以键入。
Dim nullableIDigitalState As IDigitalState = nothing
这将声明IDigitalState类型的变量为null。如果你在谈论Nullable<>
泛型,它具有限制值类型的where限制,所以它只接受IDigitalState的结构变体。
我想念你的观点吗?
回答:
您可以与泛型结合使用。例如:
Sub Test(Of T As {IDigitalState, Structure})() Dim something As T? = GetEitherValueOrNull …
End Sub
这里的关键是,你在一个具体的操作(通用)型T
它有两个条件:
- 它是一个结构,
- 它实现
IDigitalState
。
或者,你可以使用的接口类型,可以是Nothing
的正常变化,而不需要一个Nullable
。
回答:
将接口实现限制为结构类型的唯一情况是接口类型将被用作通用约束,而不是存储位置类型。在这种情况下,任何需要类型参数的代码都是实现该接口的结构才能指定。没有什么会阻止类实现接口,但那又如何?类型为IDigitalState
的变量可以包含对实现该接口的类的引用,但不能作为类型为T As {Structure,IDigitalState}
的通用参数传递,因此需要结构类型实现的代码不会在意可能存在此类事物。
注意,顺便说一句,该存储实现IDigitalState
成IDigitalState
类型的变量将有效地创建具有匹配那些结构的字段的新的类对象,以及存储该对象的引用的结构体。如果你希望确保实现一个接口的结构将像一个结构而不是一个类一样行为,你需要将它传递或保存在一个带有接口约束的泛型类型的变量中,而不是在接口类型的变量中。
以上是 限制对结构的接口只有在vb.net 的全部内容, 来源链接: utcz.com/qa/262939.html