Вы можете создать делегата, который связывает экземпляр. Вы можете сделать это либо с помощью метода stati c Delegate.CreateInstance
, либо с помощью метода MethodInfo.CrateInstance
. Первый основан на том, что вы знаете, что экземпляр на самом деле является скрытым первым параметром метода, поэтому последний может быть немного более понятным.
class Thing
{
int _Number;
public Thing(int number) { _Number = number; }
public int GetNumber() { return _Number; }
}
public static void Main()
{
Thing thingOne = new Thing(1);
Thing thingTwo = new Thing(2);
MethodInfo getter = typeof(Thing).GetMethod("GetNumber");
Func<int> getOne = (Func<int>)Delegate.CreateDelegate(typeof(Func<int>), thingOne, getter);
Func<int> getTwo = (Func<int>)getter.CreateDelegate(typeof(Func<int>), thingTwo);
Console.WriteLine(getOne());
Console.WriteLine(getTwo());
}