Question: 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?

Answer: 
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.
```
foreach(PropertyInfo pi in yourObject.GetType().GetProperties())
{
   Type theType = pi.PropertyType;
}

```