Manvinder
Manvinder

Reputation: 4591

How to get all the properties of a specified type in a class without reflection

I have a class which is has tons of properties. Most of them are of custom types. I want to get all those properties, type of whose interface is same.

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; }
}

I want something which returns propabc and propdef.

I know how to do it using reflection, but I am looking for another way.

I am working on c# 4.0

Thanks

Upvotes: 2

Views: 408

Answers (4)

Aliostad
Aliostad

Reputation: 81700

There is an alternative approach for components. It is TypeDescriptor for classes that implement IComponent. I believe that is used by WPF.

Upvotes: 0

Sasha
Sasha

Reputation: 8860

The main problem of reflection is that it is slow. If you don't want to use reflection only because of it's slowness, you could make caching of your property list in some static property or class. I used this tecknique widely in similar problems and there wasn't any problems with perfomance.

If you have holy war against reflection, you could create a special util that parses C# file (or builds your prokects, loads output assembly and use reflection, but only before build, not in run-time), finds needed properties and writes it into autogenerated file (maybe also C# code file) as static-class array-property initializer. And call that util on pre-build event of your project. Then you'll get all needed properties completely without reflections =) (but I wouldn't do that)

Upvotes: 1

Kevin Gosse
Kevin Gosse

Reputation: 39037

Well, there's two ways:

1/

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

2/ Reflection :P

If you need to retrieve the list of properties many times and are afraid of the performance impact, compute the list only once and store it in a static property (as the list of properties of a class won't change during runtime).

Upvotes: 0

Darin Dimitrov
Darin Dimitrov

Reputation: 1039498

I am afraid that this is not possible at runtime without using reflection. That's what reflection is designed for.

Upvotes: 7

Related Questions