public class TableLayoutPanel{
public virtual void SayHello(){
Console.WriteLine("Hello TableLayoutPanel");
public class MyTableLayoutPanelBase : TableLayoutPanel
public override void SayHello(){
Console.WriteLine("Hello MyTableLayoutPanelBase");
public class MyTableLayoutPanelExt : MyTableLayoutPanelBase
public override void SayHello(){
Console.WriteLine("Hello MyTableLayoutPanelExt");
public class MyTableLayoutPanelUltraExt : MyTableLayoutPanelExt
public override void SayHello(){
Console.WriteLine("Hello MyTableLayoutPanelUltraExt");
public static T CreateMyTableLayoutPanelControl<T>()
where T : TableLayoutPanel
return Activator.CreateInstance<T>();
public static void Main()
MyTableLayoutPanelExt myTableLayoutPanelControlExt = CreateMyTableLayoutPanelControl<MyTableLayoutPanelExt>();
myTableLayoutPanelControlExt.SayHello();