Какова наилучшая практика для проверки, поддерживается ли метод на интерфейсе, и вызова его? - PullRequest
2 голосов
/ 11 ноября 2011

Скажем, у меня есть 2 интерфейса, которые следуют той же последовательности вызовов функций.

У 1-го интерфейса есть дополнительный метод, у 2-го нет метода, поэтому его не следует вызывать. Как проверить, поддерживается ли метод, а затем вызвать его?

Лучше ли привести объект к интерфейсу, и если не ноль, вызвать метод или есть лучший способ?

Ответы [ 5 ]

3 голосов
/ 11 ноября 2011

Лучшая практика, которую я знаю:

myInterface myCastedObject = myObject as myInterface;
if(myCastedObject != null)
{
   myCastedObject.myMethod();
}
1 голос
/ 11 ноября 2011

Это как раз то, для чего предназначены оператор и интерфейсы is.

if (obj1 is MyInterface1)
   (obj1 as MyInterface1).Method1();
1 голос
/ 11 ноября 2011

Альтернативой использованию is является использование факта, что as возвращает null в случае неудачного приведения:

var casted = obj as MyInterface1;
if (casted != null)
    casted.Method1();
0 голосов
/ 11 ноября 2011

Если вы позволите расширенному интерфейсу наследовать от первого, вы можете создать два метода, которые явно вызывают то, что должны, без повторяющегося кода.

public interface IFirst
{ ... }

public interface ISecond : IFirst
{ ... }

public void DoWork(IFirst obj) {...}

public void DoWork(ISecond obj)
{
    DoWork(obj as IFirst);

    /* ISecond calls */
}

В этой модели вы не проверяете типы.

0 голосов
/ 11 ноября 2011

Вы можете использовать клавиатуру is , чтобы проверить, является ли объект интерфейсом, который вы хотите использовать.

if(myObject is myInterface) 
{
   ((myInterface)myObject).myMethod();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...