Как можно использовать отражение в классе без геттеров / сеттеров? - PullRequest
0 голосов
/ 27 мая 2020

У меня есть класс со следующими свойствами:

Public Class PetClass

    Public Enum Animal
         Bird = 1
         Dog = 2
         Cat = 3
    End Enum

    Public MyPetType As Animal = Animal.Cat

    Public MyPetName As String = "BigMeow"

End Class

Когда я объявляю его вот так ...

Dim n As New PetClass

... а затем наведите на него указатель мыши, я см. следующее:

enter image description here

Мне нравится, как отображаются свойства, особенно перечисление в строку с представлением numeri c в {}.

Я хотел бы иметь возможность распечатать всю эту информацию в консоли отладки.

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

Я попытался получить свойства с помощью следующего кода, найденного здесь :

Public Sub DisplayAll(ByVal Someobject)
    Dim _type As Type = Someobject.GetType()
    Dim properties() As PropertyInfo = _type.GetProperties()  'line 3
    For Each _property As PropertyInfo In properties
        Console.WriteLine("Name: " + _property.Name + ", Value: " + _property.GetValue(Someobject, Nothing))
    Next
End Sub

Однако нет PropertyInfo найден для моего класса.

Почему?

Если это из-за отсутствия Getters / Setters:

Использование явных Getters / Setters - это самый последний вариант, который я бы хотелось бы попробовать. В моем реальном классе более 100 свойств, и я выбрал текущий дизайн по какой-то причине.

Спасибо!

Изменить: я добавил новое свойство с помощью таких средств получения / установки :

Public Property SomeTest() As String
    Get
        Return "foo"
    End Get
    Set(value As String)

    End Set
End Property

Это свойство указано в «DisplayAll», но, как я объяснил, я не хочу использовать геттеры / сеттеры, и Visual Studio, похоже, может работать и без него, так как может отображать свойства просто прекрасны:

enter image description here

...