using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;


namespace cs2

{

    public class MatheMatics

    {

        delegate int Mathdelegate(int x, int y);


        static int Add(int x, int y) { return x + y; }

        static int Subtract(int x, int y) { return x - y; }

        static int Multiply(int x, int y) { return x * y; }

        static int Divide(int x, int y) { return x / y; }


        Mathdelegate[] methods;


        public MatheMatics()

        {

            methods = new Mathdelegate[] { MatheMatics.Add, MatheMatics.Subtract,

                MatheMatics.Multiply, MatheMatics.Divide };

        }


        public void Calculator(char opt, int operand1, int operand2)

        {

            switch (opt)

            {

                case '+':

                    Console.WriteLine("+: " + methods[0](operand1, operand2));

                    break;


                case '-':

                    Console.WriteLine("-: " + methods[1](operand1, operand2));

                    break;


                case '*':

                    Console.WriteLine("*: " + methods[2](operand1, operand2));

                    break;


                case '/':

                    Console.WriteLine("/: " + methods[3](operand1, operand2));

                    break;


                default:

                    Console.WriteLine("잘못된 입력입니다.");

                    break;

            }

        }

    }

    class Program

    {

        delegate void newdelegate(char opt, int operand1, int operand2);


        static void Main(string[] args)

        {

            

            MatheMatics math = new MatheMatics();

            newdelegate one = math.Calculator;


            one('+', 5, 10);

            one('-', 10, 5);

            one('*', 1, 5);

            one('/', 5, 1);

        }


    }

}


delegate 부분 공부하고 있는데 이 코드에서 

static int Add(int x, int y) { return x + y; }

        static int Subtract(int x, int y) { return x - y; }

        static int Multiply(int x, int y) { return x * y; }

        static int Divide(int x, int y) { return x / y; }


        Mathdelegate[] methods;


        public MatheMatics()

        {

            methods = new Mathdelegate[] { MatheMatics.Add, MatheMatics.Subtract,

                MatheMatics.Multiply, MatheMatics.Divide };

        }

이 부분이 이해가 안갑니다. 저기서 static 빼면 생성자로 초기화 해주는 부분이 틀렸다고 나오던데 왜 static이 들어가야 하는건가요??