متد غیر static رو نمیشه بدون ساختن شی از کلاس بطور مستقیم صدا زد .
اصولا در همه ی زبان های برنامه نویسی تابع رو وقتی static میزارن که تابع ربطی به شی نداشته باشه و مربوط به خاصیت کلاس باشه. اگر function شما این ویژگی رو نداره بهتره static نباشه .
مثلا فرض کنید یک کلاس برای ذخیره سازی چند تا اسم دارید یک متد size داره که تعداد اسم های ذخیره شده رو بر میگردونه خب طبیعتا صدا زدن size بدون داشتن شی از کلاس منطقی نیست چون size مشخص نیست این جا size() نمی تونه static باشه .
ولی خب مثلا تابع WriteLine داخل کلاس Console چون از WriteLine برای نوشتن یک متن استفاده میشه و ربطی به شی کلاس نداره بصورت static نوشته شده و برای صدا زدنش نیازی به ساختن شی از Console نیست .
اگر تابع مثال شما static نیست به این شکل عمل کنین :
class Program
{
static void Main()
{
Program p = new Program();
int x = 10;
int y = p.func(x);
//...
}
int func(int a)
{
a++;
return a;
}
}