使用反射来获取继承接口的类的属性
本文关键字:接口 属性 继承 获取 反射 | 更新日期: 2023-09-27 18:26:46
我有以下场景,我想获得实现接口的类的属性,但不包括那些虚拟的属性。为了让事情变得清楚,我将给你举一个小例子:-
假设我们有以下接口:-
public interface IUser
{
int UserID { get; set; }
string FirstName { get; set; }
}
实现此接口的类:-
public class User: IUser
{
public int UserID { get; set; }
public string FirstName { get; set; }
public virtual int GUID { get; set; }
}
现在,我想做的是获取类的属性,不包括虚拟的。当类没有实现接口时,以下操作很好:-
var entityProperties = typeof(User).GetProperties()
.Where(p => p.GetMethod.IsVirtual == false);
但是,当接口实现时,上面的代码行不会返回任何结果。如果我删除"where",它可以正常工作(但是虚拟属性不会被排除在外),如下所示:
var entityProperties = typeof(User).GetProperties();
有人知道了吗?我搜索了一下,但没有找到任何结果。提前感谢您的帮助。
我怀疑您想要IsFinal
:
要确定方法是否可重写,仅检查IsVirtual是否为true是不够的。要使方法可重写,IsVirtual必须为true,IsFinal必须为false。例如,一个方法可能是非虚拟的,但它实现了一个接口方法。
因此:
var entityProperties = typeof(User).GetProperties()
.Where(p => p.GetMethod.IsFinal);
或者可能:
var entityProperties = typeof(User).GetProperties()
.Where(p => !p.GetMethod.IsVirtual ||
p.GetMethod.IsFinal);