获取已实现接口的所有属性

时间:2017-08-31 21:36:04

标签: c# reflection interface

我有以下设置:

public interface IInput
{
}

public class SomeInput : IInput
{
    public int Id { get; set; }
    public string Requester { get; set; }
}

现在我想编写一个函数,可以使用任何实现IInput的函数并使用反射来为我提供属性:

public Display(IInput input)
{
    foreach (var property in input.GetType().GetProperties())
    {
        Console.WriteLine($" {property.Name}: {property.GetValue(input)}");
    }
}

其中

var test = new SomeInput(){Id=1,Requester="test"};
Display(test);

显示

Id: 1
Requester: test

1 个答案:

答案 0 :(得分:1)

如果您使用typeof(),则会获得变量的类型。但是如果使用GetType(),您将获得实际的运行时类型,从中可以反映所有已实现的属性。

void DumpProperties(IInput o)
{
    var t = o.GetType();
    var props = t.GetProperties(BindingFlags.Instance | BindingFlags.Public);
    foreach (var prop in props)
    {
        Console.WriteLine(String.Format("Name: {0} Value: {1}",
            prop.Name,
            prop.GetValue(o).ToString()
        );
    }
}