我有一个有很多属性的课程。他们中的大多数是自定义类型。我想获得所有这些属性,其接口类型相同。
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
由于
答案 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会使用它。