Есть ли чистый способ запроса Type для свойств и фильтрации тех, которые поступают из интерфейса?Получить свойства класса без свойств, полученных из заданного интерфейса
Скажем, у меня есть класс и интерфейс
public interface IFoo
{
string Bar { get; set; }
}
public class Foo : IFoo
{
public string Bar { get; set; }
public string Baz { get; set; }
}
И я хочу, чтобы получить массив PropertyInfo
-х, которые содержат только Baz
свойство.
Edit:
Это то, что я сейчас ... Я знаю, что это не идеально, но это своего рода делает работу.
var allProperties = typeof(T).GetProperties();
var interfaceMethods = typeof(T).GetInterfaceMap(typeof(IFoo)).TargetMethods;
return allProperties.Where(x => !interfaceMethods.Contains(x.GetGetMethod()) || !interfaceMethods.Contains(x.GetSetMethod())).ToArray();
Кажется немного странным это нужно , Полагайте, что 'Foo' может и не быть, в настоящее время реализует' IFoo' (этот интерфейс еще не существует). Ваш код вернет 'Bar' и' Baz'. Затем кто-то приходит и решает создать интерфейс «IFoo» и использовать его в Foo. Обычно это не считается «нарушением изменений» - и все же это изменит поведение кода, о котором вы просите. –
Это динамическое поведение, о котором вы упомянули, это именно то, что я ищу. Если он реализует IFoo, я хочу только «Baz», и когда это не так, я хочу «Bar» и «Baz». – ppiotrowicz