Я не уверен, позволяет ли C # переопределять методы при создании нового объекта, но вместо этого вы можете использовать делегаты.
Делегат - это переменная, в которой функция хранит свое значение.Нечто подобное должно делать более или менее то, что вы ищете
class Tab
{
public delagate void MyOnGUI(); // Declare the delegate
private MyOnGUI onGUI; // An instance of the delegate
public Tab(string s, MyOnGUI onGUI)
{
this.onGUI = onGUI;
//...
}
public void OnGUI()
{
onGUI(); // Call the delegate
}
}
// ...
tabs.addTab(new Tab("test", delegate(){
// Your code here
});