Отражение на вложенных типах добавляет методы. Это ошибка? - PullRequest
0 голосов
/ 01 марта 2020

Я использую отражение, чтобы получить методы для вложенных типов / типов, и у них всегда есть дополнительные методы, которых не существует.

это, кажется, разница между:

info As **TypeInfo**
Dim methods As IEnumerable(Of MethodInfo) = info.DeclaredMethods

против

info As **Type**
Dim methods As IEnumerable(Of MethodInfo) = info.GetMethods

Возвращены дополнительные методы:

Equals, GetHashCode, GetType, ToString

Это ошибка. Net или я что-то упустил? Кажется, это происходит и с другими вложенными типами, поэтому я пытаюсь понять, почему?

Public Class TestHasNested

    Public Property bla As String

    Public Class NestedItem

        Public Property MyProperty As Integer

    End Class
End Class

1 Ответ

0 голосов
/ 01 марта 2020

В моем случае я использовал два разных класса отражения TypeInfo против Type

Type.GetMethods()

против

TypeInfo.DeclaredMethods()

Я также обнаружил, что вы можете позвонить Type.GetTypeInfo(), чтобы получить TypeInfo

    Dim valueNested As New TestHasNested.NestedItem()

    Dim tpNested = valueNested.GetType()

    Dim methNested As IList(Of MethodInfo) = tpNested.GetMethods()

    Console.WriteLine("Type.GetMethods")
    For Each m As MethodInfo In methNested
        Console.WriteLine(m.ToString())
    Next

    Dim methNestedDeclared As IList(Of MethodInfo) = tpNested.GetTypeInfo().DeclaredMethods()
    Console.WriteLine()

    Console.WriteLine("TypeInfo.DeclaredMethods")
    For Each m As MethodInfo In methNestedDeclared
        Console.WriteLine(m.ToString())
    Next

Результат:

Type.GetMethods

Int32 get_MyProperty()
Void set_MyProperty(Int32)
Boolean Equals(System.Object)
Int32 GetHashCode()
System.Type GetType()
System.String ToString()

TypeInfo.DeclaredMethods

Int32 get_MyProperty()
Void set_MyProperty(Int32)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...