Вы не можете точно знать, реализован ли метод на самом деле (или есть ли у класса просто «фиктивная» реализация). Поэтому вы можете использовать шаблон, например, один из следующих, чтобы узнать, поддерживается ли конкретный метод:
-> иметь несколько интерфейсов и посмотреть, реализует ли их класс; это, вероятно, самый чистый способ справиться с этим, но он может оставить вас с большим количеством различных интерфейсов, что может быть нежелательно:
IIntfA = inst as IIntfA;
if (inst != null) {
// inst seems to be implemented
}
-> Используйте методы в стиле TryXxx, которые возвращают true, если они были успешными (например, TryParse()
и т. Д.).
-> Использовать NotImplementedException
- но учтите, что перехват этих данных очень дорогой и должен использоваться только для вызовов, которые выполняются редко или когда не ожидается отсутствующая реализация. Класс Stream
работает так, например, если он не может быть записан (но, кроме того, есть свойство, указывающее, что класс поддерживает, например, IsWritable
в классе Stream
).