У меня есть общедоступная подпрограмма, которая называется многими классами. Однако теперь мне нужно что-то сделать в этой подпрограмме, которая относится только к небольшому числу классов, которые ее называют. Поэтому вместо того, чтобы возвращаться и добавлять свойство ко всем существующим классам, я хотел бы просто проверить, есть ли у этого класса это свойство, и если да, то что-то с ним делать. Но я не могу понять, как просто проверить наличие члена без ошибки.Как определить, существует ли член класса?
Например:
Public Class_1
Public a1 as string = ""
Public Sub New()
' when a button is clicked call subroutine "check()"
End Sub
End Class
Public Class_2
Public a1 as string = ""
Public a2 as integer = 0
Public Sub New()
' when a button is clicked call subroutine "check()"
End Sub
End Class
Public Class whatever
Public Sub check(sender as object)
If sender.a2 = 0 then
' do something
End if
End Sub
End Class
Я попытался такие вещи, как
If not(sender.a2 is nothing) then
If isnothing(sender.a2) then
Но я не могу пройти мимо того факта, что я получаю сообщение об ошибке, просто используя «sender.a2», так как a2 не всегда является участником отправителя.
Как проверить, не является ли a2 членом класса отправки без использования «sender.a2»?
OOP позволяет перегружать методы. Вместо того, чтобы определять его как «Подтвердить (отправитель как объект)», используйте реальные типы и определите кратность. Внутри вы можете вызвать какой-то общий метод, но это позволит 'Sub check (sender as Class_2)' делать определенные вещи Class_2 по мере необходимости. Вы можете использовать отражение или gettype, возможно, чтобы определить, с чем работаете, но было бы лучше исправить код, чтобы быть более OO. Наследование или интерфейсы могут также решить эту проблему. – Plutonix
Возможный дубликат [Проверить, что объект имеет определенное свойство] (http://stackoverflow.com/questions/9399872/verify-that-an-object-has-a-certain-property) –
Вы можете создать интерфейс, это свойство и реализовать этот интерфейс при использовании свойства. Тогда вам просто нужно протестировать и применить свой объект к этому интерфейсу. Или, если вы поместите свою функцию проверки внутри своих классов, у вас может не возникнуть проблема в конце концов. –