jtb
jtb

Reputation: 397

in C#, Is there anyway to determine a class's members at runtime?

Suppose I have a class named foo, and it has 3 public members foo1, foo2, and foo3.

Now suppose I'm writing a function that takes an instance of class foo as a parameter, but when I'm writing this function I have no idea what public members it has.

Is there a way for me to determine at run-time that it has public members foo1, foo2, foo3 AND ONLY foo1, foo2, foo3. IE - find out what all the public members are?

And can I also determine their types?

Upvotes: 3

Views: 475

Answers (6)

Darin Dimitrov
Darin Dimitrov

Reputation: 1039548

You could use reflection:

// List all public properties for the given type
PropertyInfo[] properties = foo.GetType().GetProperties();
foreach (var property in properties)
{
    string propertyName = property.Name;
}

You should be aware that there could be an additional overhead when using reflection because types are evaluated at runtime.

Upvotes: 3

AlwaysAProgrammer
AlwaysAProgrammer

Reputation: 2919

Following article on MSDN should help you determine the methods of a type

Upvotes: 0

Gregoire
Gregoire

Reputation: 24882

foreach(PropertyInfo pi in yourObject.GetType().GetProperties())
{
   Type theType = pi.PropertyType;
}

Upvotes: 0

Matt Greer
Matt Greer

Reputation: 62057

This is a job for reflection. Look into methods like:

myFoo.GetType().GetMethods(BindingFlags.Instance | BindingFlags.Public);

This will return all public, instance methods that the type has. You can then look through the returned results and determine if this class meets your criteria. There are equivalent methods as well for other types of members, such as GetFields(...), GetProperties(...), etc.

Basically you want to get to know the Type class, which is the core of C#'s reflection capabilities.

Upvotes: 2

Radu094
Radu094

Reputation: 28444

Well, that's what Reflection is there for :

Type myObjectType = typeof(foo);

System.Reflection.FieldInfo[] fieldInfo = myObjectType.GetFields();
foreach (System.Reflection.FieldInfo info in fieldInfo)
   Console.WriteLine(info.Name); // or whatever you desire to do with it

Upvotes: 6

Bronumski
Bronumski

Reputation: 14282

Have a look at the .net reflection namespace:

http://msdn.microsoft.com/en-us/library/ms173183(VS.80).aspx

Upvotes: 2

Related Questions