Подтвердить что ты не робот

Есть ли способ вызвать явно реализованный метод/свойство через отражение в .NET?

Мне нужно определить, может ли данный метод или свойство исходить из определенного интерфейса и явно реализован.
Кто-нибудь это сделал и действительно ли можно получить эту информацию с помощью отражения .NET?


Обновить

Как видно из комментариев ниже принятого ответа, фактическая вещь, которую я пытаюсь выполнить, - вызвать метод, реализующий конкретный интерфейс посредством отражения. Поскольку возможность иметь несколько интерфейсов с одной и той же сигнатурой метода, я хотел бы определить правильную реализацию для вызова на основе интерфейса. В моем сценарии тип реализации, интерфейс и имя метода определяются во время выполнения, поэтому я не могу использовать простое литье  в моем случае.

4b9b3361

Ответ 1

Явно реализованные методы интерфейса на С# являются частными в целевом классе. Вы можете использовать этот факт и создать этот метод расширения для возврата только этих методов:

static IEnumerable<MethodInfo> GetExplicitlyImplementedMethods(this Type targetType, 
    Type interfaceType) 
{ 
  return targetType.GetInterfaceMap(interfaceType).TargetMethods.Where(m => m.IsPrivate);
}

Примечание: это только для С#.

ОБНОВЛЕНИЕ: Но, по вашим требованиям, вам кажется, что вы только хотите знать, какие методы реализуют методы интерфейса, не заботясь о том, является ли реализация неявной или явной. Для решения, которое работает на разных языках, этого было бы достаточно:

static IEnumerable<MethodInfo> GetImplementedMethods(this Type targetType,
    Type interfaceType) 
{ 
  return targetType.GetInterfaceMap(interfaceType).TargetMethods;
}

Ответ 2

Если при использовании отражения метод является закрытым, а его имя содержит., как "System.IDisposable.Dispose", то это явная реализация.