Есть ли способ вызвать явно реализованный метод/свойство через отражение в .NET?
Мне нужно определить, может ли данный метод или свойство исходить из определенного интерфейса и явно реализован.
Кто-нибудь это сделал и действительно ли можно получить эту информацию с помощью отражения .NET?
Обновить
Как видно из комментариев ниже принятого ответа, фактическая вещь, которую я пытаюсь выполнить, - вызвать метод, реализующий конкретный интерфейс посредством отражения. Поскольку возможность иметь несколько интерфейсов с одной и той же сигнатурой метода, я хотел бы определить правильную реализацию для вызова на основе интерфейса. В моем сценарии тип реализации, интерфейс и имя метода определяются во время выполнения, поэтому я не могу использовать простое литье
в моем случае.
Ответы
Ответ 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", то это явная реализация.