You are ignoring the fact that for both .NET Console Applications, and WinForms Apps, a Class named 'Program ... which is not generic ... is a special construction used to tell the compiler how to start the Application.
In the case of a Console Application created in Visual Studio using File/New/Project => select ConsoleApplication, the Program Class is not marked 'static, and 'Main is written:
class Program
{
static void Main(string[] args)
{
}
}
When you create a new WinForm Project using File/New/Project => select Windows Forms Application:
static class Program
{
[STAThread]
static void Main()
{
}
}
It is possible to remove the 'static modifier from the WinForms Program Class and still have a working program.
In the case of a Console App you can change the declaration of the Program Class to 'static and it will still run.
However, I cannot see any reason why anyone would ever want to modify the default declarations of a WinForms app 'Program Class to non-static, or a Console app Program Class to static !
Your creating a generic Program<> class is just ... a mistake. And, in this case, you make no use of the generic Type you specify.
What were you really trying to achieve here: to add one method to the 'Program class ?