C# is based on events, so, basically using events is the fastest way of passing objects between classes and methods.
By saying "callbacks" i suppose you had "events" in mind tho. Easy to mix them up, if you had experience in programming on C (or derivatives of C, like PAWN).
So, for example your button class should have something like:
class SomeClass
{
public event EventHandler clicked;
...
if(Conditions_for_callback_are_met)
{
clicked(this, EventArgs.Empty);
}
...
}
then on some other class where you're creating the object, you can simply:
SomeClass someObject = new SomeClass();
someObject.clicked += new EventHandler(someEvent_Fired);
followed by:
private void someEvent_Fired(object sender, EventArgs e)
{
// add type cast to get the object, that fired the event;
SomeClass objectPassed = (SomeClass)sender;
...
}
and handle the event.
Hope that helped.
Disclaimer:
I learned this programming C# (not InSim related, since im demo user).