【发布时间】:2013-04-03 13:14:37
【问题描述】:
在研究 Assembly.GetInterfaces() 时,我发现该方法是 MustOverride 方法。在我看来,这意味着它对派生类没有默认操作。它基本上只是一个签名,一个抽象方法。然而,我仍然可以在一个类型上使用它,它会返回所有实现的接口,而无需为 MustOverride 方法编写任何代码。
这个进入 MustOverride 方法的代码在哪里?我是否只是简单地通过在创建的类型上调用方法来间接覆盖它?
这个问题纯粹是基于学习和发现,除了理解语言的范围之外,我并没有试图做任何事情。
这是我使用的代码:
Public Class Form1
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim t As Type
Debug.WriteLine(GetType(Integer))
t = GetType(Integer)
Dim interfaceArr As Type() = t.GetInterfaces
For i As Integer = 0 To interfaceArr.Length - 1
Debug.WriteLine(interfaceArr(i))
Next
End Sub
End Class
Output Is:
System.IComparable
System.IFormattable
System.IConvertible
System.IComparable 1[System.Int32]
System.IEquatable 1[System.Int32]
【问题讨论】:
-
这个问题更详细地描述了 MustOverride。 stackoverflow.com/a/1686872/1157215
-
“我仍然可以在一个类型上使用它并且它会返回所有实现的接口”到底是什么意思。您能否提供更多详细信息或示例说明您的意思?
-
谢谢。你看到了什么你没想到的输出?
-
我不希望在 MustOverride 方法上看到任何我没有添加任何代码的输出。这些方法在添加代码之前不会失效吗?
-
你看到了什么 MustOverride 方法?输出仅显示接口,而不是方法。
标签: vb.net syntax overriding .net-assembly abstract-methods