tags:

views:

90

answers:

6

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?

+3  A: 

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.

Darin Dimitrov
+2  A: 

Have a look at the .net reflection namespace:

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

Bronumski
+5  A: 

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
Radu094
+2  A: 

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.

Matt Greer
A: 
foreach(PropertyInfo pi in yourObject.GetType().GetProperties())
{
   Type theType = pi.PropertyType;
}
Gregoire
A: 

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

Yogendra