Question: Is there a way to store a delegate without binding it to an object like how you can with a MethodInfo? Right now I am storing a MethodInfo so I can give it the object to call the method for. But I much rather have it be a delegate. Like is there an attribute that tells .net that the first parameter is "this"?

```
MethodInfo mi;
Action<string> func;
mi.Invoke(this,new object[]{str});
func(this, str); //Is this possible with a delegate?

```

Answer: 
You can use the `Delegate.CreateDelegate` method to create a strongly-typed delegate for a `MethodInfo`.

If you don't know the method's signature at compile-time, you can either create a `Func<...>` using Reflection, or create a lambda expression that invokes the `MethodInfo`:

```
MethodInfo methodInfo = ...;
object thisObj = ...;
Func<object[]> callMethod = args => methodInfo.Invoke(thisObj, args);

```

(This is called currying)

Note that this will still have the performance hit from reflection every time the delegate is called, unlike `Delegate.CreateDelegate`.
Why not simply

```
Action<T, string> unbound = (This, str) => This.Method(str);

```

so you can

```
unbound(instanceA, "hello");
unbound(instanceB, "world");

```

or even

```
Action<string> bound = str => unbound(instanceC, str);

```