Мне нужно, чтобы Object o ссылался на это, поскольку у меня есть другой код, которому нужно следовать, который зависит от o.
Что вы имеете в виду?Знаете ли вы, что где бы у вас ни был код, ожидающий Object
, он может принять ITest
?Это одно из больших преимуществ наследования.
Что касается MissingMemberException
: не могли бы вы дать определения для ITest
, Test
и Class1
?Если тип Test
реализует ITest.GetMember
, используя метод с другим именем (это допустимо в VB.NET), это может объяснить исключение, хотя, похоже, именно в этом и заключается проблема.Просмотр соответствующего кода из ваших классов Test
и Class1
, в частности, должен помочь.
Редактировать : В зависимости от вашего обновления, вот что происходит.Вы смешиваете позднюю привязку в VB.NET с концепцией .NET интерфейсов .Оба поддерживаются в VB.NET, но это не одно и то же.
Поэтому, когда у вас есть Object
, вы можете вызывать любой метод.Это будет решено во время выполнения.Но это должен быть метод, который на самом деле относится к типу объекта .В случае Test
функция GetMember
отсутствует;есть только функция ITest_GetMember
.Поэтому, чтобы использовать позднюю привязку, вам нужно было бы вызвать o.ITest_GetMember
(и этот метод также должен быть общедоступным, я считаю).
Тем не менее, Я настоятельно советуюпротив смешивания реализации интерфейса и позднего связывания таким образом .На самом деле, я бы рекомендовал против позднего связывания вообще в случаях, подобных этому, когда у вас действительно есть интерфейс.Я действительно не вижу веской причины для того, чтобы приводить вашу строго типизированную переменную ITest
к переменной типа Object
;как я уже говорил ранее, вы можете всегда использовать ITest
в качестве Object
(Object
- это root иерархии типов .NET; вы можете использовать что-нибудь как Object
), но то, что вы не можете всегда делать, это использовать Object
как что-то еще.
Похоже, вы жертвуете удобством использованияваша i
переменная (в приведенном вами примере кода) без уважительной причины.
Edit 2 : если подумать, вы передаете Object
ссылки ByRef
?Если это так, я полагаю, что это может быть законной причиной (хотя я скептически отношусь к тому, что у вас будут веские причины для этого).
Если это так, вам просто нужно разыграть свой Object
вернуться к ITest
, чтобы использовать членов ITest
.(Видите, поскольку у вас уже есть и ITest
переменная в i
, именно поэтому я продолжаю задавать вопрос о вашем повышении до Object
.)