如何在没有反射的情况下获取类中指定类型的所有属性

时间:2011-12-29 11:29:38

标签: c# oop class reflection interface

我有一个有很多属性的课程。他们中的大多数是自定义类型。我想获得所有这些属性,其接口类型相同。

Public class abc:IamLegend
{
    few properties
}

public class def:IamLegend
{
    few properties
}

public class on_which_iamworking
{
    public abc propabc{ get; set; }
    public def propdef{ get; set; }
    public someothertype propother{ get; set; }
}

我想要一些能够返回propabc和propdef的东西。

我知道如何使用反射来做,但我正在寻找另一种方式。

我正在研究c#4.0

由于

4 个答案:

答案 0 :(得分:7)

我担心如果不使用反射,这在运行时是不可能的。这就是反射的目的。

答案 1 :(得分:1)

反思的主要问题是它很慢。如果由于速度慢而不想使用反射,则可以在某些静态属性或类中对属性列表进行缓存。我在类似的问题中广泛使用了这个tecknique,并且没有任何性能问题。

如果你对反射有过神圣的战争,你可以创建一个特殊的工具来解析C#文件(或构建你的prokects,加载输出程序集并使用反射,但只在构建之前,而不是在运行时),找到所需的属性和将它写入自动生成的文件(也可能是C#代码文件)作为静态类数组属性初始化程序。并在项目的预构建事件上调用该util。那么你将完全得到所有需要的属性,没有反射=)(但我不会这样做)

答案 2 :(得分:0)

嗯,有两种方法:

1 /

 return new List<string> { "propabc", "propdev" };

2 /反思:P

如果需要多次检索属性列表并且害怕性能影响,请仅计算一次列表并将其存储在静态属性中(因为类的属性列表在运行时不会更改)

答案 3 :(得分:0)

组件有另一种方法。对于实现IComponent的类,它是TypeDescriptor。我相信WPF会使用它。