使用反射获取继承接口的类的属性

克拉夫

在以下情况下,我想获取实现接口的类的属性,但是不包括虚拟属性。为了清楚起见,我将举一个小例子:

假设我们有以下界面:

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是否为真是不够的。若要使方法可重写,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);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何获取实现接口但不继承接口的类

来自分类Dev

接口-注册类继承接口以基于该类创建对象

来自分类Dev

接口-注册类继承接口以基于该类创建对象

来自分类Dev

WPF在视图或单独的类中继承接口

来自分类Dev

有没有办法在 Kotlin 中获取继承接口(或另一个类)的对象类型?

来自分类Dev

F#继承接口

来自分类Dev

子类继承接口吗?

来自分类Dev

继承接口实现

来自分类Dev

F#继承接口

来自分类Dev

使用反射按顺序获取类的属性

来自分类Dev

如何忽略使用反射继承的类的所有隐藏属性?

来自分类Dev

为什么继承类静态方法而不继承接口静态方法?

来自分类Dev

使用Java反射获取接口字段的具体类

来自分类Dev

C#中的继承接口

来自分类Dev

从基本抽象类和IDisposable的正确位置继承接口

来自分类Dev

C ++模板数组类:错误生成取决于它是否继承接口

来自分类Dev

为什么绑定类继承接口时无法更新UI?

来自分类Dev

使用反射获取类内列表属性的count属性值

来自分类Dev

使用反射获取属性

来自分类Dev

Java反射获取匿名类的原始接口

来自分类Dev

使用反射从父类获取自己的属性名称

来自分类Dev

如何在WinRT中使用反射获取类的静态属性

来自分类Dev

在接口中声明继承接口的所有方法?

来自分类Dev

接口列表 - 继承接口,一个 IList<>

来自分类Dev

如何使用反射从多层继承的类中获取受保护的朋友的财产?

来自分类Dev

接口继承与类继承

来自分类Dev

使用反射获取属性引用

来自分类Dev

在实现的类型graphql中继承接口字段

来自分类Dev

继承接口并设置访问修饰符