В зависимости от того, как вы ссылаетесь на объект, некоторые члены будут видны. Интерфейс может быть неявно определен или явно определен, или может быть реализован производным классом, и вы используете ссылку на базовый класс. Другими словами, не всегда сразу видны все доступные элементы объекта.
Таким образом, если вы хотите протестировать реализацию определенного интерфейса (ISomething) вашим объектом (yourObj), один из вариантов - это проверить тип данных, используя отражение. Основываясь на результатах этого теста, вы можете явно привести реализующий объект в интерфейс типа и использовать его члены ...
if (yourObj is ISomething)
((ISomething)yourObj).DoSomething();
Это то же самое, что сделано другим способом (более "многословно" при использовании вызовов методов):
if (typeof(ISomething).IsAssignableFrom(yourObj.GetType()))
((ISomething)yourObj).DoSomething();
В этом примере предполагается, что интерфейс ISomething определен как:
public interface ISomething {
void DoSomething();
// other members ...
}
Таким образом, этот код говорит: если интерфейс ISomething Is-Assignable-From ваш объект выбора, то ваш объект реализует этот интерфейс и, следовательно, имеет эти открытые члены.